解码时我上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