Domanda

Voglio aggiungere il protocollo di archiviazione (NSCoding) per la mia classe del modello, e poi ho implementare entrambi i metodi encodeWithCoder:(NSCoder*)coder e initWithCoder:(NSCoder*)coder. MyModelClass ha 2 variabili di istanza (NSString e NSImage), quindi uso il metodo encodeObject:(id)object forKey:(NSString*)string per codificare l'oggetto più il valore di chiave particolare. Ma io continuo ottenuto l'errore:

*** -encodeObject:forKey: only defined for abstract class. Define -[NSArchiver encodeObject:forKey:]!

ecco il mio codice per i metodi NSCoding:

- (id)initWithCoder:(NSCoder *)coder {
 [super init];
 mainPath = [[coder decodeObjectForKey:@"mainPath"] retain];
 icon = [[coder decodeObjectForKey:@"icon"] retain];

 return self;
}

- (void)encodeWithCoder:(NSCoder *)coder {
 NSLog(@"encode with coder is called");
 [coder encodeObject:mainPath forKey:@"mainPath"];
 [coder encodeObject:icon forKey:@"icon"];

}

E questo è come io li chiamo alla mia classe controller:

id object = [assetArray objectAtIndex: [[rows lastObject] intValue]];

 if ([object isKindOfClass:[ItemAssetModel class]])
  NSLog(@"object is correct");
 else
  return NO;

 NSData *data = [NSArchiver archivedDataWithRootObject: object];

Se cambio la encodeObject:(id)obj forKey:(NSString*)str con encodeObject:(id)obj, l'errore è ferma, ma il risultato è, i dati archiviati non copia il valore variabile di istanza (cmiiw). Mi manca qualcosa su questo?

Grazie. Hebbian

È stato utile?

Soluzione

Prova a usare NSKeyedArchiver invece di NSArchiver.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top