back

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

■エンコーディング可能なオリジナルクラスの作成

では、実際にNSCodingを実装してエンコーディング可能なオリジナルクラスを作成してみましょう。ここでは「key」「mail」「memo」といったプロパティをもったクラス「SampleData」を作ってみます。

下のリスト欄にソースコードを掲載しておきました。SampleData.hSampleData.mの両方です(ただし、これで完成ではありません)。ではポイントを整理しておきましょう。

1. 保管する値はプロパティにする
NSCodingでは、保存する値はプロパティとして用意します。プロパティになっていない値は正しく保管できないので注意してください。

2. プロパティのエンコードはencodeObject: forKey:を使う
エンコードする(保存をする)ためのencodeWithCoder:メソッドでは、引数で渡されるNSCoder内の「encodeObject: forKey:メソッドを使って値を保存します。ここではプロパティ類はすべてNSStringとして用意しているので、このメソッドでエンコードすることができます。

同様のメソッドは、NSCoderに多数用意されています。以下に主なものを整理しておきましょう。いずれもキーを指定して保存します。forKey:にはキーとなるNSStringを指定してください。これで、そのキーで値をエンコードします。
[《NSCoder》 encodeBool:《BOOL》 forKey:キー ];
[《NSCoder》 encodeDoouble:《double》 forkey:キー ];
[《NSCoder》 encodeFloat:《float》 forkey:キー ];
[《NSCoder》 encodeInteger:《NSInteger》 forkey:キー ];
[《NSCoder》 encodePoint:《NSPoint》 forkey:キー ];
[《NSCoder》 encodeRect:《NSRect》 forkey:キー ];
[《NSCoder》 encodeSize:《NSSize》 forkey:キー ];
[《NSCoder》 encodeObject:《id》 forkey:キー ];

3. プロパティのデコードはdecodeObjectForKey:を使う
デコードする(読み込む)ためのinitWithCoder:メソッドでは、decodeObjectForKey:メソッドを使って値をデコードします(これもNSStringの値であるためです)。これはキーを指定して値を取り出しデコードするものです。同様のメソッドも多数揃っていますので、以下に主なものを整理しておきます。
BOOL 変数 = [《NSCoder》 decodeBoolForKey:キー ];
double 変数 = [《NSCoder》 decodeDooubleForkey:キー ];
float 変数 = [《NSCoder》 decodeFloatForkey:キー ];
NSInteger 変数 = [《NSCoder》 decodeIntegerForkey:キー ];
NSPoint* 変数 = [《NSCoder》 decodePointForkey:キー ];
NSRect* 変数 = [《NSCoder》 decodeRectForkey:キー ];
NSSize* 変数 = [《NSCoder》 decodeSizeForkey:キー ];
id 変数 = [《NSCoder》 decodeObjectForkey:キー ];

これらを実装することで、エンコード/デコード可能なクラスができあがります。これで、NSUserDefaultsで保存をすることも可能となるのです。ただし、そのためにはNSUserDefaults側にちょっと追加をしておく必要があるでしょう。



(by. SYODA-Tuyano.)

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

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

※SampleData.h

#import <Foundation/Foundation.h>

@interface SampleData : NSObject<NSCoding> {
    NSString* key;
    NSString* mail;
    NSString* memo;
}
@property (retain,readwrite)NSString* key;
@property (retain,readwrite)NSString* mail;
@property (retain,readwrite)NSString* memo;
@end


※SampleData.m

#import "SampleData.h"

@implementation SampleData

@synthesize key;
@synthesize mail;
@synthesize memo;

-(id)initWithCoder:(NSCoder *)aDecoder {
    self = [super init];
    if (self){
        self.key = [aDecoder decodeObjectForKey:@"keyValue"];
        self.mail = [aDecoder decodeObjectForKey:@"mail"];
        self.memo = [aDecoder decodeObjectForKey:@"memo"];
    }
    return self;
}

-(void)encodeWithCoder:(NSCoder *)aCoder {
    [aCoder encodeObject:self.key forKey:@"keyValue"];
    [aCoder encodeObject:self.mail forKey:@"mail"];
    [aCoder encodeObject:self.memo forKey:@"memo"];
}

@end



   

記事のリストに戻る



PC Site G+ mail