J'ai un nsarray d'objets personnalisés que je veux enregistrer et restaurer. Peut-il être fait avec NSUserDefault? P>
3 Réponses :
Objets personnalisés, non. Nsuserdefaults ne connaît que quelques types de base (Nsdata, Nstring, Nsnumber, Nsdate, Nsarray ou Nsdiction). p>
Pourriez-vous utiliser JSON ( http://code.google.com/p/json -framework / ) Pour convertir votre objet personnalisé en une représentation à chaîne, enregistrez-le, puis enregistrez une matrice de ceux-ci par défaut? (Utilisation de SetObject: Forey: Méthode). P>
Sinon, vous pouvez regarder avec SQLite, NSCODER ou même recourir à Fopen. P>
Même si j'utilise des objets personnalisés, ils sont stockés à Nsarray, ce que j'essaie de sauver. Ne devrait-il pas marcher alors?
Si par "ne devrait pas cela fonctionner?" Vous voulez dire "Impossible de stocker des objets personnalisés dans un nsarray?" la réponse est oui. Si vous voulez dire "Impossible de stocker la gamme d'objets personnalisés dans NsuserDefaults?" Ensuite, la réponse est non, car NSUserDefaults ne peut pas stocker des objets arbitraires.
nsuserdefault code> ne peut pas écrire des objets personnalisés dans un fichier, seuls ceux qu'il connaît (
nsarray code>,
nsdicdiction code>,
nstring code> ,
nsdata code>,
nsnumber code> et
nsdate code>). Au lieu de cela, vous devriez jeter un coup d'œil sur le Guide de programmation Archives et Serializations , ainsi que le Nscoding Protocol Référence , si vous souhaitez enregistrer et restaurer des objets personnalisés sur le disque. La mise en œuvre du protocole n'est pas terriblement difficile et nécessite très peu de travail. P>
Vous pouvez toujours utiliser NSUSERDEFAULTS FORT> Si vous archivez votre tableau dans Pour archiver votre tableau, vous pouvez utiliser le code suivant: P> nsdata code>.
- (void)encodeWithCoder:(NSCoder *)coder;
{
[coder encodeObject:aLabel forKey:@"label"];
[coder encodeInteger:aNumberID forKey:@"numberID"];
}
- (id)initWithCoder:(NSCoder *)coder;
{
self = [[CustomObject alloc] init];
if (self != nil)
{
aLabel = [coder decodeObjectForKey:@"label"];
aNumberID = [coder decodeIntegerForKey:@"numberID"];
}
return self;
}
Dois-je juste ajouter ces définitions de la méthode ou dois-je mettre du code dans ces méthodes?
J'ai édité mon message avec un exemple de ce dont vous aurez besoin de mettre dans ces méthodes.
Travailler comme un charme. Merci.
Y a-t-il une bonne réponse ici?
@Joshua, merci d'avoir fourni le code d'exemple, c'est très utile.