Czy NSManagedObject może być zgodny z NSCoding
Muszę przenieść pojedynczy obiekt na urządzenie. W tej chwili konwertuję mój obiekt NSManagedObject na słownik, archiwizując go i wysyłając jako NSData. Po otrzymaniu odarchiwizuję go. Ale naprawdę chciałbym przenieść sam obiekt NSManagedObject poprzez archiwizację i archiwizację zamiast tworzenia pośredniego obiektu danych.
@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];
}
Problem z powyższym kodem to. Rozbija się naself.title
winitWithCoder
mówiąc nierozpoznany selektor wysłany do instancji.
title
nie jest rozpoznawany jako selektor.Jeśli niearchiwizuj, użyj jakiegoś kontekstu obiektu zarządzanego nil przed utworzeniem obiektuinitWithCoder
?Czy muszę przesłonićcopyWithZone
?