back

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

■SampleDataを使ったミニデータベース!

というわけで、仕上げとして、SampleDataを利用したミニデータベースを作ってみます。最初に作ったサンプルをアレンジしたものです。「a」コマンドでデータの追加、「f」コマンドで検索が行えます。データの追加では、キー、メールアドレス、メモの3つの値を保管するようになりました。また検索では、オブジェクトの内容をまとめて書き出すようにしてあります。

データの読み書きを行なっている部分を見てください。かなりシンプルな形になっていることがわかるでしょう。

・データの読み込み
NSMutableDictionary* memo = [defaults
    sampleDataDicForKey:@"newmemo"];

・データの書き出し
[defaults setSampleDataDic:memo forKey:@"newmemo"];

「クラスのNSCoding実装」「インスタンスのエンコード・デコード処理」「NSDicitonaryごとエンコード・デコードする処理」といったものが用意されたことで、このシンプルな読み書きが可能となったわけです。

まぁ正直なところ、「そんな本格的なデータまで初期設定ファイルに保存するな!」といわれそうですが……。こんな具合にNSCodingを実装し、さまざまなインスタンスを独自にNSDataなどにエンコードする方法を用意すれば、どんなデータでもたいていは初期設定ファイルに保存できてしまう、ということはよくわかったのではないでしょうか。

初期設定は、非常に手軽にアプリ固有の情報を保管できる機能ですので、いろいろと試してみると面白い使い道が見つかるんじゃないでしょうか。



(by. SYODA-Tuyano.)

※リストが表示されない場合

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

#import <Foundation/Foundation.h>
#import "SampleData.h"

NSString* input();

int main (int argc, const char * argv[])
{
    @autoreleasepool {
        NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
        NSMutableDictionary* memo = [defaults sampleDataDicForKey:@"newmemo"];
        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* keystr = input();
                printf("mail:");
                NSString* mailstr = input();
                printf("memo:");
                NSString* memostr = input();
                SampleData* obj = [[SampleData alloc] init];
                obj.key = keystr;
                obj.mail = mailstr;
                obj.memo = memostr;
                [memo setValue:obj forKey:keystr];
                printf("saved...\n");
            }
            if ([cmd isEqualToString:@"f"]) {
                printf("find: ");
                NSString* fstr = input();
                SampleData* obj = [memo valueForKey:fstr];
                printf("%s: %s, %s\n",
                       [fstr cStringUsingEncoding:NSUTF8StringEncoding],
                       [obj.mail cStringUsingEncoding:NSUTF8StringEncoding],
                       [obj.memo cStringUsingEncoding:NSUTF8StringEncoding]);
            }
        }
        
        [defaults setSampleDataDic:memo forKey:@"newmemo"];
        [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]];
}




 

記事のリストに戻る



PC Site G+ mail