back

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

■NSUserDefaultsを拡張する

NSUserDefaultsには、作成したSampleDataインスタンスを保存するためのメソッドというのは用意されていません。setObject: forKey:で保存しようとすると、今の段階では失敗してしまいます。

先ほどのNSCodingの実装は、あくまで「エンコードするための機能」を追加したものです。どういうことか?というと、つまり、SampleDataインスタンスをバイナリデータに変換したり、逆にバイナリデータからSampleDataインスタンスに戻せるようになった、ということなのです。

バイナリデータというのは、Objective-Cでは「NSData」というインスタンスとして扱えるようになっています。すなわち、これでSampleDataインスタンスをNSDataインスタンスに変換できるようになったのです。

NSDataは、NSUserDefaultsで保存することができます。そこで、NSUserDefaultsに、SampleDataを読み書きするためのメソッドを追加することにしましょう。

下にそのためのコードを掲載しておきます。ここでは「setSampleData: forKey:」と「sampleDataForKey:」という2つのメソッドを追加することにします。それぞれ、SampleData.h/SampleData.mあたりに追記しておけばよいでしょう。

ここでは「NSKeyedArchiver」「NSKeyedUnarchiver」というクラスを利用しています。それぞれ以下のメソッドを使ってバイナリデータに変換することができます。


・インスタンスをNSDataに変換する
NSData* 変数 = [NSKeyedArchiver 
    archivedDataWithRootObject:《id》];

・NSDataをインスタンスに変換する
id 変数 = [NSKeyedUnarchiver 
    unarchiveObjectWithData:《NSData》];

こうしてSampleDataNSDataをやり取りできるようになったら、後はsetObject: forKey:dataForKey:メソッドを使って初期設定に保存や読み込みができるようになる、というわけです。



(by. SYODA-Tuyano.)

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

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

※NSUserDefaultsの拡張(SampleData.h)
@interface NSUserDefaults(SampleDataSupport)
-(void)setSampleData:(SampleData*)obj forKey:(NSString*)aKey;
-(SampleData*)sampleDataForKey:(NSString*)aKey;
@end


※NSUserDefaultsの拡張(SampleData.m)

@implementation NSUserDefaults(SampleDataSupport)

-(void)setSampleData:(SampleData*)obj forKey:(NSString*)aKey {
    NSData* data = [NSKeyedArchiver archivedDataWithRootObject:obj];
    [self setObject:data forKey:aKey];
}

-(SampleData*)sampleDataForKey:(NSString*)aKey {
    SampleData* obj = nil;
    NSData* data = [self dataForKey:aKey];
    if (data != nil) {
        obj = (SampleData*)[NSKeyedUnarchiver unarchiveObjectWithData:data];
    }
    return obj;
}

@end



   

記事のリストに戻る



PC Site G+ mail