libro
www.tuyano.com
初心者のためのObjective-Cプログラミング入門

NSUserDefaults/NSCodingによる設定情報の保存 (2/8)

作成:2013-03-25 08:16
更新:2013-03-25 08:16

■NSUserDefaults利用の実際

では、実際にNSUserDefaultsを利用する例を挙げておきましょう。ここでは一例として、NSDictionaryにメモデータを追加して保存していくプログラムを考えてみましょう。

下にサンプルのソースコード(main.m)を掲載しておきます。実行すると、コマンドの入力待ち状態となります。「a」とタイプすると、データを追加します。キーとなるテキストと、メモの内容をそれぞれ書いてReturnすればそれが追加されます。「f」とタイプすると検索モードになり、調べたいキー名をタイプしてReturnすると、そのキーのメモを表示します。何も入力せずにReturnすればプログラムを終了します。

やっていることはそれほど難しいものではありません。プログラム開始時にNSUserDefaultsインスタンスを取得し、dictionaryForKey:@"memo"という値を取得します。そしてこれを元にNSMutableDictionaryを作成しておきます。これにメモの内容を追加したり、ここから検索したりするわけです。

プログラムを終了する際にはsetObject: forKey:メソッドでmemo@"memo"というキーでNSUserDefaultsに設定し、synchronizeでファイルと同期を取ります。これでメモはすべてファイルに保存されました!

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

#import <Foundation/Foundation.h>

NSString* input();

int main (int argc, const char * argv[])
{
    @autoreleasepool {
        NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
        NSDictionary* memodata = [defaults dictionaryForKey:@"memo"];
        NSMutableDictionary* memo = [NSMutableDictionary dictionaryWithDictionary:memodata];
        BOOL flg = YES;
        while (flg) {
            printf("[a]dd or [f]ind: ");
            NSString* cmd = input();
            if ([cmd isEqualToString:@""]) {
                flg = NO;
            }
            if ([cmd isEqualToString:@"a"]) {
                printf("key:");
                NSString* key = input();
                printf("memo:");
                NSString* memostr = input();
                [memo setValue:memostr forKey:key];
                printf("saved...\n");
            }
            if ([cmd isEqualToString:@"f"]) {
                printf("find: ");
                NSString* fstr = input();
                NSString* memostr = [memo valueForKey:fstr];
                printf("%s\n",[memostr cStringUsingEncoding:NSUTF8StringEncoding]);
            }
        }
        [defaults setObject:memo forKey:@"memo"];
        [defaults synchronize];
        printf("bye...");
    }
    return 0;
}

// テキストの入力用関数
NSString* input()
{
    char str[255];
    fgets(str, 255, stdin);
    NSString* result = [NSString stringWithUTF8String:str];
    return [result stringByTrimmingCharactersInSet:
            [NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

※関連コンテンツ

「初心者のためのObjective-Cプログラミング入門」に戻る