2010-09-04 4 views
0

J'ai des problèmes en utilisant NSKeyedArchiver/NSKeyedUnarchiver pour enregistrer mon objet. J'ai ajouté les méthodes - (id)initWithCoder:(NSCoder *)decoder et - (void)encodeWithCoder:(NSCoder *)encoder. Le problème est lorsque j'essaie de sauvegarder l'objet, il ne fonctionne pas correctement.
Je pourrais imaginer un problème (mais je ne suis pas sûr si c'est le problème;)). J'ai des tableaux dans mon objet. Ils contiennent plus d'objets (j'ai implémenté les deux méthodes "Coder"). Alors, le tableau appelle-t-il les méthodes dans ses objets?Comment enregistrer mon propre objet avec NSKeyedArchiver?

Une solution possible?

Merci!

+0

Êtes-vous sûr que tous les objets que vous essayez d'archives sont archivables? Je n'ai pas la liste à portée de main mais c'est surtout les primitives. NSString, NSNumber, NSValue et quelques autres. –

+0

Avez-vous utilisé 'encoderObject: forKey:' pour encoder dans une archive à clé? – asandroq

Répondre

5

Dans le fichier d'en-tête indique que votre classe mettra en œuvre le protocole NSCoding, comme <NSCoding>

Dans la méthode encodeWithCoder vous devez encoder tous les champs que vous souhaitez enregistrer comme ceci:

[encoder encodeObject:array1 forKey:@"array1"]; 

Ensuite, dans le procédé initWithCoder, décoder les champs qui ont été codés:

array1 = [coder decodeObjectForKey:@"array1"]; 

Be su que tous les conteneurs codés contiennent uniquement des objets qui implémentent également le protocole NSCoding. Cela peut être des classes principales telles que NSString, NSNumber, NSArray, NSDictionary, ainsi que votre propre objet personnalisé.

Si votre projet n'utilise pas la collecte des ordures dont vous avez besoin de conserver ou de copier les données extraites de l'archive comme ceci:

array1 = [[coder decodeObjectForKey:@"array1"] retain]; 
+0

Merci beaucoup !!! –

+0

Eh bien ... maintenant j'ai le problème suivant: Comment est-ce que j'agis quand j'ai un objet hérité par mon autre objet propre. On a bien fonctionné, mais dès que j'en hérite, ça ne marche pas –

+0

- (id) initWithCoder: (NSCoder *) codeur {if (self = [super initWithCoder: coder]) { –

Questions connexes