2009-07-06 9 views
2

Dans un jeu, j'ai un tas d'objets et de collections d'objets, certains d'entre eux contiennent des références à d'autres. Existe-t-il un moyen simple de les archiver - pour sauvegarder un état de jeu - tout en conservant ces références? Si j'ai bien compris, NSArchiver peut le faire, mais il n'était pas disponible sur le SDK 2, est-ce sur le SDK 3?Un moyen facile d'archiver des objets liés

(j'ai en quelque sorte posé cette question (best way to save/load iphone game data) mais SDK 3 a été libéré en attendant, et je voudrais savoir si ce sujet a progressé.)

Répondre

3

Vous devez faire en sorte que toutes les classes que vous souhaitez sérialiser implémentent le protocole NSCoding. Après cela, vous devez les encoder avec la classe NSKeyedArchiver. Cette classe sérialisera récursivement vos objets et traitera des cycles. NSKeyedArchiver est disponible dans toutes les versions de l'iPhone SDK. Pour décoder vos objets, vous utiliserez NSKeyedUnarchiver.

+0

Maintient-il les références entre les objets? Dites qu'un objet dans une collection a un pointeur vers un autre objet dans une autre collection, ce pointeur sera-t-il toujours là après le décodage des objets? –

+0

Oui, il gère plusieurs références et cycles. Vous devez juste vous assurer que tous les objets implémentent initWithCoder :, et encodeWithCoder: à partir du protocole NSCoding. L'endroit le plus commun où cela est utilisé dans Cocoa est les fichiers NIB. Interface Builder crée votre interface en tant qu'instances des classes AppKit, puis les archive avec un NSCoder. –

+0

Cela fonctionne comme un charme. J'avais été égaré pendant des mois à cause de la réponse à ma question similaire. Merci d'avoir éclairci cela, c'est un vrai changement de vie, et aussi une leçon pour ne pas croire tout ce que les gens avec la réputation disent sur stackoverflow. :) –

0

Check out de sérialisation ici:

Encoding/Decoding Objects (apple.com)

Fondamentalement, vous devez faire vos classes de valeur-clé de codage conforme, pour enregistrer correctement toutes vos données; Il les archive dans des listes de propriétés binaires. Après avoir écrit vos fonctions initWithCoder: et encodeWithCoder: c'est à peu près automatique!

+0

Le codage de valeur-clé et le codage NSC sont deux concepts distincts. –

Questions connexes