我需要跨设备传输单个对象。现在我正在将我的 NSManagedObject 转换为字典,将其存档并作为 NSData 发送。收到后,我正在取消存档。但我真的很想通过归档和取消归档而不是创建中间数据对象来传输 NSManagedObject 本身。
@interface Test : NSManagedObject<NSCoding>
@property (nonatomic, retain) NSString * title;
@end
@implementation Test
@dynamic title;
- (id)initWithCoder:(NSCoder *)coder {
self = [super init];
if (self) {
self.title = [coder decodeObjectForKey:@"title"]; //<CRASH
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)coder {
[coder encodeObject:self.title forKey:@"title"];
}
@end
NSData *archivedObjects = [NSKeyedArchiver archivedDataWithRootObject:testObj];
NSData *objectsData = archivedObjects;
if ([objectsData length] > 0) {
NSArray *objects = [NSKeyedUnarchiver unarchiveObjectWithData:objectsData];
}
上面代码的问题是。self.title
它在initWithCoder
说无法识别的选择器发送到实例时崩溃。
- 为什么
title
不被识别为选择器。 - 在创建对象之前,是否应该取消归档以某种方式使用 nil 托管对象上下文
initWithCoder
? - 我需要覆盖
copyWithZone
吗?