2013-08-27 6 views
0

J'utilise la réponse à this question pour enregistrer un NSArray dans un fichier. Je ne peux pas récupérer le tableau si. Je reçois pour mon 0x00000000 récupéré boundaries tableau quand je fais ce qui suit:Impossible d'enregistrer NSArray de double pour le fichier ios

pour sauver:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"boundaries"]; 

[array writeToFile:filePath atomically:YES]; 

pour récupérer:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"boundaries"]; 

NSArray *boundaries = [NSArray arrayWithContentsOfFile:filePath]; 

quelque chose de mal avec cela? Le tableau est plein de données correctes quand je l'enregistre.

J'ai essayé d'enregistrer [myArray description] et je l'ai enregistré et récupéré d'accord, mais les données sont évidemment différentes de ce que je veux avoir. J'enregistre 8 doubles dans le tableau.

+1

Accédez au sandbox de l'application et vérifiez si vous pouvez enregistrer le fichier correctement ou non. –

+0

Comment savez-vous que le fichier a été écrit avec succès? Vous ne vérifiez pas la valeur de retour de l'écriture. De plus, comme le dit enricmacias dans sa réponse, vous écrivez une variable appelée 'array'. Êtes-vous sûr qu'elle contient quelque chose? – JeremyP

+0

Ai-je dit que je savais que c'était écrit correctement? Je viens de dire que le tableau est rempli de 8 doubles ... Je sais parce que j'ai mis un point de rupture .. et fait 'tableau de po' et il m'a donné 8 doubles. – KKendall

Répondre

1

Obtenir les données du tableau en utilisant

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array]; 

puis enregistrez-le dans votre répertoire de documents. Pour le récupérer,

NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

Cela devrait fonctionner.

+0

devrait donc la méthode utilisée dans la question. – JeremyP

2
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"boundaries"]; 

[array writeToFile:filePath atomically:YES]; 

D'où vient cette variable 'tableau'?

De toute façon, vous ne pourrez pas enregistrer les doubles directement dans un NSArray. Vous devez enregistrer ces doubles en tant que NSNumber. Comme ceci:

[[NSNumber alloc] initWithDouble:doubleNumber]; 
+0

Je ne veux pas montrer la méthode entière qui montre comment je récupère des données de la base de données et définit le tableau avec ces données. C'est pourquoi je viens de mettre dans "tableau" et dit que le tableau est rempli de 8 doubles ... Si vous voulez voir que je peux le mettre là-haut. – KKendall

+0

C'est bon. Assurez-vous simplement que les informations de ce tableau sont correctes. Cela peut aider: http://stackoverflow.com/questions/3010363/nsarray-writetofile-fails Il semble que NSNumber ne sont pas des valeurs valides pour writeToFile: Essayez d'enregistrer NSString au lieu de NSNumber – enricmacias

+0

Cool, merci pour les heads up. – KKendall

Questions connexes