2010-07-07 3 views
2

J'écris et je lis actuellement à partir d'un tableau de données, et j'utilise l'index de chaque élément pour réaliser quelque chose. J'ai besoin d'un moyen de stocker ce tableau, j'ai regardé les paramètres par défaut de l'utilisateur, mais cela stocke un dictionnaire, avec la reprise à l'aide de touches. Je ne saurai pas quelle clé a été stockée.Sérialiser un tableau de données

Quel est le meilleur était de stocker la matrice de données sur l'iphone?

Cordialement

Répondre

3

NSKeyedArchiver, une sous-classe concrète de NSCoder, fournit un moyen d'encoder des objets (et les valeurs scalaires) dans un format indépendant de l'architecture que peut être stocké dans un fichier.

Vous pouvez sérialiser tout ce que vous aimez dans un fichier:

// need a path 
- (NSString*) getPath 
{ 
    NSString* path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
    return [path stringByAppendingPathComponent:@"someInfo"]; 
} 

// save an array 
- (void) save:(NSArray*)array 
{ 
    [NSKeyedArchiver archiveRootObject:array toFile:[self getPath]];  
} 

// get that array back 
- (NSArray*) load 
{ 
    return [NSKeyedUnarchiver unarchiveObjectWithFile:[self getPath]];  
} 

Vous pouvez sérialiser un dictionnaire de tableaux si vous avez plus d'un que vous voulez stocker.

+0

Appréciez-le. : D – jarryd

+0

A quoi correspond le "someInfo"? – jarryd

+0

C'est le nom du fichier. –

1

Il est possible de stocker un tableau dans NSUserDefaults. Cela dépend cependant du type d'objets que le tableau contient. NSKeyedArchiver est une autre bonne option, tout comme le stockage du tableau en tant que plist. Il se pourrait même que CoreData soit le meilleur choix pour vous. Tout dépend de la taille attendue de vos données et de la manière dont vous les utilisez. NSKeyedArchiver semble être un juste milieu pour de nombreuses situations, mais pour répondre à votre question, plus d'informations sont nécessaires.

+0

Je ne fais que stocker NSStrings dans le tableau. Je prends l'entrée de l'utilisateur d'un champ de texte (l'utilisateur enregistre un titre pour un 'favori' auquel j'ajoute l'index d'image qu'ils voulaient sauvegarder) Puis en lisant du tableau, je coupe juste l'index, remplis un tableview avec tous les titres dans le tableau. Un utilisateur peut alors sélectionner un favori et la référence d'image est extraite du tableau et chargée à l'écran. Il ne devrait pas être plus de 50 chaînes. – jarryd

+0

Semble que le stockage à un plist serait le plus approprié dans votre cas. Je suggère de passer à l'utilisation d'un NSDictionary au lieu d'ajouter l'index de l'image. Une classe personnalisée pour votre favori peut être encore meilleure, mais que vous devriez utiliser NSKeyedArchiver. –

+0

J'ai essayé le NSDictionary, mais le problème est que j'utilise l'index du tableau pour accéder aux valeurs dont je ne connais pas la clé. Tout ce que je veux savoir, c'est stocker le tableau, puis le charger. En ce moment je lis et écris le tableau, donc je veux juste le sérialiser et le désérialiser. – jarryd

Questions connexes