Le paramètre pour NSKeyedArchiver archivéDataWithRootObject: est-il supposé être le tableau que j'essaie d'enregistrer ou le tableau converti en NSData?NSKeyedArchiver archivéDataWithRootObject:
6
A
Répondre
12
Pour convertir un tableau générique en NSData
, vous avez besoin d'un programme d'archivage! Si vous savez comment nourrir le NSData
, vous savez comment utiliser NSKeyedArchiver
. Alors:
NSArray* array= ... ;
NSData* data=[NSKeyedArchiver archivedDataWithRootObject:array];
Bien sûr tous les éléments de vos besoins array
à mettre en œuvre encodeWithCoder:
.
13
La réponse de Yuji est juste. mais avec plus de précision, votre élément d'un tableau doivent mettre en œuvre le protocole et fillin votre propre code aux méthodes initWithCoder: et encodeWithCoder: comme:
- (id)initWithCoder:(NSCoder *)decoder {
if (self = [super init]) {
self.title = [decoder decodeObjectForKey:@"title"];
self.author = [decoder decodeObjectForKey:@"author"];
self.published = [decoder decodeBoolForKey:@"published"];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:title forKey:@"time"];
[encoder encodeObject:author forKey:@"author"];
[encoder encodeBool:published forKey:@"published"];
}
vous pouvez utiliser l'archiveur et unchariver comme:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:notes];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"notes"];
NSData *notesData = [[NSUserDefaults standardUserDefaults] objectForKey:@"notes"];
NSArray *notes = [NSKeyedUnarchiver unarchiveObjectWithData:notesData];
Pour en savoir plus, vous pouvez obtenir la référence "Archiving Objective-C Objects with NSCoding".
Pour être complet, vous utilisez un NSKeyedUnarchiver pour faire l'inverse. –
"tous les éléments de votre tableau doivent implémenter encodeWithCoder:" <- ceci est seulement nécessaire pour les objets personnalisés? –
tous les éléments de votre tableau doivent avoir une implémentation de 'encoderCithCoder:', soit par Apple ou par vous. Vous pouvez vérifier si un objet fourni par Apple l'implémente ou non en consultant la documentation officielle ... voyez s'il implémente le protocole 'NSCoder'. – Yuji