Мне нужно передать один объект через устройство. Прямо сейчас я конвертирую свой 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
не распознается как селектор. - Следует ли при разархивировании каким-либо образом использовать нулевой контекст управляемого объекта перед созданием объекта в
initWithCoder
? - Мне нужно переопределить
copyWithZone
?