2010-01-19 6 views
1
NSString *myfile = [[NSBundle] mainBundle] pathForResource:@"fileName" ofType:@"plist"];  
NSMutableArray *mydata= [[NSMutableArray alloc] initWithContentsOfFile:myfile]; 

/* code to modify mydata */ 

[mydata writeToFile:myfile atomically:YES] 

En cas de simulateur 'nomFichier.plist' est modifié mais dans le cas d'iphone le fichier de périphérique reste inchangé. Il n'y a pas d'exception vu non plus.writeToFile échoue sur l'iphone mais fonctionne sur le simulateur

Le code ci-dessus devrait-il fonctionner correctement sur l'iPhone et le simulateur?

Également dans le débogueur lorsque je survole «mydata», je vois des valeurs différentes en cas de simulateur et de périphérique. En cas de simulateur je vois par exemple, '5 objets' mais dans le cas de l'appareil réel, il montre '{(int)[$VAR count]}'. Cela pourrait-il être lié au fait que le fichier n'a pas été écrit?

Répondre

5

Vous ne pouvez pas écrire dans les fichiers du répertoire de ressources d'un regroupement. En plus de cela, vous ne le souhaitez pas, car tout changement serait remplacé lorsque vous mettez à jour votre application. Le répertoire de documents persiste à travers les versions et (je crois) il est sauvegardé via iTunes.

Voici un extrait qui vérifie le répertoire des documents pour un plist. Si le fichier n'existe pas, il copie un plist des ressources dans le répertoire de documents.

BOOL success; 
NSFileManager* fileManager = [NSFileManager defaultManager]; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"score.plist"]; 
success = [fileManager fileExistsAtPath:writableDBPath]; 
if (success) return success; 
// The writable database does not exist, so copy the default to the appropriate location. 
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"score.plist"]]; 
success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error]; 
return success; 
+0

Merci Kenny. C'était utile. J'ai mis en place mes trucs en utilisant ce code et maintenant son travail avec l'appareil aussi. – climbon

+0

Merci, a fait l'affaire. Ran dans ce problème avec mes meilleurs scores (comme l'exemple;) et le copier à partir d'une ressource bundle est une excellente idée pour inclure des scores par défaut. –

Questions connexes