ドキュメントから:
デフォルト オブジェクトはプロパティ リスト、つまり、NSData、NSString、NSNumber、NSDate、NSArray、または NSDictionary のインスタンス (またはコレクションの場合はインスタンスの組み合わせ) である必要があります。
別のタイプのオブジェクトを保存するには、まず、保存するオブジェクトのクラスに NSCoding プロトコルを実装する必要があります。つまり、これらのメソッドを実装し、次のようにデコードとエンコードを行います (カスタム クラス BMDifficultyLevel の私自身のコードのスニペット):
- (id)initWithCoder:(NSCoder *)decoder {
if (self = [super init]) {
_difficultyLevel = [decoder decodeObjectForKey:@"difficulty"];
_difficultyLevelType = [decoder decodeIntegerForKey:@"type"];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:_difficultyLevel forKey:@"difficulty"];
[encoder encodeInteger:_difficultyLevelType forKey:@"type"];
}
次に、オブジェクトを保存する前に、アーカイブしてから次のように保存する必要があります。
NSUserDefaults *defaults = [[NSUserDefaults alloc] init];
_defaultsDataWithLevelObject = [NSKeyedArchiver archivedDataWithRootObject:_difficultyLevel];
[defaults setObject:_defaultsDataWithLevelObject forKey:BMDifficultyLevelDefaultsKey];
ここ_defaultsDataWithLevelObject
で、 は NSData 型のオブジェクトです。つまり、最終的には NSData オブジェクトを格納します。
デフォルトを取得するには、次のようにオブジェクトを解凍する必要があります。
_defaultsDataWithLevelObject = [[NSUserDefaults standardUserDefaults] objectForKey:BMDifficultyLevelDefaultsKey];
_difficultyLevel = [NSKeyedUnarchiver unarchiveObjectWithData:_defaultsDataWithLevelObject];