2010-02-09 14 views
17

mi chiedevo se è possibile utilizzare il metodo NSCoder:Codifica NSArray o NSDictionary usando NSCoder

- (void)encodeObject:(id)objv forKey:(NSString *)key 

per codificare sia un'istanza di NSArray o NSDictionary. Se no come si fa a codificarli? Sto cercando di utilizzare NSKeyedArchived/NSKeyedUnarchiver per inviare dati tra i telefoni tramite GameKit. L'ho provato e non riesco a recuperare la stringa che ho archiviato nel mio array. La classe di pacchetti che ho creato arriva insieme al tipo di pacchetto intero, ma non sembra che i dati siano nella matrice.

Grazie in anticipo!

+0

È un NSManagedObject personalizzato .... Penso che devo usare XML o JSON per questo, ma ho bisogno di imparare come D: –

risposta

10

NSKeyedArchiver/Unarchiver deve codificare e decodificare NSArrays e NSDictionaries senza problemi. Se la classe di pacchetto che avete creato implementa il protocollo NSCoding, è necessario chiamare in modo esplicito [encodeObject:myNsArrayforKey:@"stringsArray"] nel metodo -encodeWithCoder: (assumendo che myNsArray è il nome della variabile di istanza in oggetto pacchetto che si desidera codificare). Ma poi l'archiviatore e NSArray dovrebbero occuparsi di tutto il resto. Se lo fai, sarebbe utile sapere di più sul layout delle tue classi e chi sta chiamando chi durante la codifica/decodifica.

31

Se la matrice o il dizionario è l'oggetto radice si dovrebbe fare

NSData * encodedData = [NSKeyedArchiver archivedDataWithRootObject:someArray]; 

o

BOOL success = [NSKeyedArchiver archiveRootObject:someArray toFile:filePath]; 

Se si tratta di una variabile di una classe personalizzata esempio, nel metodo -encodeWithCoder: dovrebbe fare

[coder encodeObject:someArray forKey:@"someArray"]; 

e quindi nel metodo -initWithCoder:

someArray = [[coder decodeObjectForKey:@"someArray"] retain]; 
20

Che tipo di oggetti stai memorizzando nell'array? Assicurarsi che tutti gli oggetti memorizzati nell'array implementino il protocollo NSCoding.