解碼時我上decodeObjectForKey一個EXC_BAD_ACCESS:打電話。我將不勝感激,如果任何人都可以發現一個明顯的錯誤在這裏:EXC_BAD_ACCESS與NSKeyedUnarchiver
- (NSData *)serialize:(id <NSCoding>)object {
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver setOutputFormat:NSPropertyListBinaryFormat_v1_0];
[archiver encodeObject:object forKey:@"myobject"];
[archiver finishEncoding];
return data;
}
- (id)deserialize:(NSData *)data {
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
unarchiver.delegate = self;
id object = [unarchiver decodeObjectForKey:@"myobject"];
[unarchiver finishDecoding];
return object;
}
NSCoding協議是這樣實現的:
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super init];
if (self != nil) {
_fields = [aDecoder decodeObjectForKey:@"fields"];
_entries = [aDecoder decodeObjectForKey:@"entries"];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:_fields forKey:@"fields"];
[aCoder encodeObject:_entries forKey:@"entries"];
}
我不能使用+ unarchiveObjectWithData:因爲我需要設置一個代理更新反序列化對象:
- (id)unarchiver:(NSKeyedUnarchiver *)unarchiver didDecodeObject:(id)object {
if([[object class] isSubclassOfClass:[LCEntity class]]) {
[object setStore:_store];
}
return nil;
}
我使用ARC
- 所以不用擔心內存管理的問題。
請發表您的NSCoding協議的執行情況。 – 2012-08-10 22:29:24
你能張貼崩潰的堆棧跟蹤?另外,你對'-isSubclassOfClass:'的調用不必要的冗長。你可以說'[object isKindOfClass:[LCEntity class]]'。 – 2012-08-11 00:11:47