Domanda

[[NSUserDefaults standardUserDefaults] setObject:myArray forKey:@"myArray"];

Se faccio un array di oggetti personalizzati conformi al protocollo NSCoding, poi fa il lavoro di cui sopra? Devo fare sia la classe personalizzata e il controller della vista che contiene la matrice di oggetti personalizzati conformi al protocollo NSCoding o semplicemente la classe personalizzata? Devo usare NSKeyedArchiver da qualche parte?

È stato utile?

Soluzione

Sembra che è necessario per archiviare la matrice, sia con NSKeyedArchiver o NSArchiver. Se prima di archiviare l'array in un oggetto NSData:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myArray];

È possibile quindi memorizzare i dati in NSUserDefaults in questo modo:

[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"myArray"];

Per caricare la matrice, uso:

NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"myArray"];
NSArray *myArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];

Se si desidera utilizzare un NSMutableArray poi basta sostituire le occorrenze NSArray nel codice precedente con NSMutableArray. o si può solo NSMutableArray *myMutableArray = [myArray mutableCopy] vi darà un NSMutableArray con cui lavorare.

Ma hey, se avete intenzione della briga di farlo NSCoding compatibile, perché non solo archiviare in un file?

La documentazione che mi fece pensare che sarà necessario utilizzare un archiviatore è qui in modo da poter controllare da sé.

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