デバイス間で単一のオブジェクトを転送する必要があります。現在、NSManagedObject を Dictionary に変換し、アーカイブして 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 管理オブジェクト コンテキストを unarchive する必要があります
initWithCoder
か? - オーバーライドする必要があります
copyWithZone
か?