NSCodingでやらかしてました


すんごい初歩的なミスで時間をどぶに・

-(void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:_identifier forKey:@"identifier"];
[aCoder encodeObject:_title forKey:@"title"];
[aCoder encodeObject:_url forKey:@"url"];
[aCoder encodeObject:_addDate forKey:@"addDate"];
[aCoder encodeObject:_comment forKey:@"comment"];
[aCoder encodeObject:_key forKey:@"key"];
}
-(id)initWithCoder:(NSCoder *)aDecoder{
self=[super init];
if(!self){
return nil;
}
_identifier=[[aDecoder decodeObjectForKey:@"identifier"] retain];
_title=[[aDecoder decodeObjectForKey:@"title"] retain];
_url=[[aDecoder decodeObjectForKey:@"url"] retain];
_addDate=[[aDecoder decodeObjectForKey:@"addData"] retain];
_comment=[[aDecoder decodeObjectForKey:@"comment"] retain];
_key=[[aDecoder decodeObjectForKey:@"key"] retain];
return self;
}

こんなかんじでエンコードとデコードを行いますよね。デコードはプロパティへのセッタを使えばリテインがいらなかったりしますが、今回はそこではなく。

デコードするときにキーがなくても別に問題なく’nil’ が帰ってきて何事もなかったように処理が進んでいくのです。

つまり、エンコードでキーに設定したaddDateをデコードでaddDataと書き間違えてたためにデータが復元出来ない状態になってて、スペルミスのチェックという基本を怠ってリファレンスやwebをさまようこと数時間。

気づいた瞬間の脱力感がもうorz

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です