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.

Dlaczego jesttitle nie jest rozpoznawany jako selektor.Jeśli niearchiwizuj, użyj jakiegoś kontekstu obiektu zarządzanego nil przed utworzeniem obiektuinitWithCoder?Czy muszę przesłonićcopyWithZone?

questionAnswers(3)

yourAnswerToTheQuestion