2009-07-09 9 views
20

Je souhaite ajouter un NSMutableArray de NSStrings à l'une de mes entités dans mon modèle de données principal. Le problème est que ce n'est pas un type pris en charge dans les données de base.Enregistrement d'un NSMutableArray sur des données de base

J'ai essayé de créer un attribut transformable, mais le problème est que je ne vois aucun moyen de transformer un NSMutableArray en NSData, puis de passer de NSData à un NSMutableArray. Quelqu'un at-il une idée de la façon dont ce problème peut être résolu?

(Je sais que je peux archiver le tableau, mais je ne veux pas le faire, je veux qu'il soit présent dans mon modèle).

Répondre

32

Vous pouvez avoir un attribut de données binaires dans votre objet modélisé, archiver le tableau en données et le remettre à l'objet.

Mais je pense que le meilleur moyen serait d'avoir une relation to-many, au lieu d'utiliser un tableau directement.

**** Edit: Voici comment archiver le tableau dans NSData afin qu'il puisse être utilisé dans votre objet géré ***

NSData *arrayData = [NSKeyedArchiver archivedDataWithRootObject:[NSArray arrayWithObjects:@"1",@"2", nil]]; 

Fondamentalement, toute classe que vous avez conforme au protocole NSCoding peut être archivé de cette manière. NSArray/NSMutableArray s'y conforment déjà. Ils disent à tous leurs objets de s'archiver, donc ils doivent aussi se conformer. Et tous les membres de ces objets doivent se conformer, etc. C'est comme un arbre.

Étant donné que votre tableau est conforme, et qu'il s'agit d'un tableau de NSString (qui est également conforme), alors vous êtes en or.

+1

Mais nous avons ici un tableau de chaînes simples - auriez-vous besoin d'envelopper chaque chaîne dans un objet géré, ou y a-t-il un type d'encapsuleur NSManagedObject fin autour de NSString déjà disponible? –

+0

Comment transformer le tableau de chaînes en données? (J'ai trouvé une solution de contournement pour ce problème qui impliquait de ne pas utiliser un tableau de chaînes, mais je suis toujours curieux pour une solution) – gburgoon

+9

Le contraire est 'NSArray * array = [NSKeyedUnarchiver unarchiveObjectWithData: arrayData];' – Resh32

Questions connexes