2010-06-21 4 views
0

J'ai essayé d'écrire un simple programme de liste de courses, mais lorsque j'essaie de réécrire les valeurs modifiées dans un fichier plist, je ne reçois que les valeurs initiales qui étaient dans le fichier avec.writeToFile Output .plist n'écrit pas les valeurs correctes

Mon fichier plist original est un grand tableau (dataArray) de dictionnaires avec seulement deux champs dans chaque dictionnaire un bool et une chaîne lorsque vous sélectionnez un élément dans la tableview la valeur bool est modifiée pour l'élément unique le dataArray à la console je peux voir que la valeur a été changée, mon seul problème est que quand j'essaye d'écrire dataArray dans un fichier j'obtiens le fichier dans le répertoire de documents mais toutes les valeurs de bool sont toujours éteintes.

- (void)viewDidLoad { 

//load from plist file 
NSString *path = [[NSBundle mainBundle] pathForResource:@"OriginalChecklist" ofType:@"plist"]; 
self.dataArray = [NSMutableArray arrayWithContentsOfFile:path]; 

    [super viewDidLoad]; 
} 

- (void)viewWillDisappear:(BOOL)animated 
{ 
NSString *documentsDirectory = [@"~/Documents/" stringByExpandingTildeInPath]; 
NSString *savePath = [documentsDirectory stringByAppendingPathComponent:@"Checklist.plist"]; 
[dataArray writeToFile:savePath atomically:YES]; 

NSLog(@"location information %@", savePath); 
NSLog(@"dataAray contents %@=", dataArray); 
} 

Et comme je l'ai dit quand je sortie le résultat de la tableauDonnees à la console que je reçois les résultats suivants à partir des éléments que j'ai vérifié.

cell = <UITableViewCell: 0x3b143d0; frame = (0 0; 320 44); text = 'Water Bottle'; autoresize = W; layer = <CALayer: 0x3b14650>>; 
checked = 1; 
text = "Water Bottle"; 

cell = <UITableViewCell: 0x3b20560; frame = (0 88; 320 44); text = 'GPS'; autoresize = W; layer = <CALayer: 0x3b20610>>; 
checked = 1; 
text = GPS; 

Si quelqu'un sait comment enregistrer les résultats modifiés dans le fichier plist, j'apprécierais beaucoup un peu d'aide.

Merci Brad


Je suis encore un peu de mal à ma demande de pouvoir créer un plist et charger les informations de cette plist dans la section viewDidLoad. Le code j'utilise au moment de vérifier le fichier d'origine et si elle n'y est pas créer un est comme suit

(void) {viewDidLoad

BOOL success; 

NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"CustomChecklist.plist"]; 

success = [fileManager fileExistsAtPath:filePath]; 
NSLog(@"STATUS OF SUCCESS %@",success); 
if (!success) { 
    NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingFormat:@"OriginalChecklist.plist"]; 
    success = [fileManager copyItemAtPath:path toPath:filePath]; 
    self.dataArray = [NSMutableArray arrayWithContentsOfFile:filePath]; 
    NSLog(@"IF STATEMENT CREATING THE FILE"); 
}else { 
    self.dataArray = [NSMutableArray arrayWithContentsOfFile:filePath]; 
    NSLog(@"IF STATEMENT READING THE FILE"); 
} 

NSLog(@"location information %@", filePath); 
[super viewDidLoad]; 

}

Quand je construis cette application, il construit et fonctionne ok, mais je reçois quelques avertissements NSFileManager ne peut pas répondre à -copyItemAtPath: toPath

une fois que ce sera terminé la sortie à la console semble que si elle n'a même pas vérifié le fichier ou créé celui à lire.

2010-07-06 16: 22: 42,803 CampingChecklist [400: 207] ETAT DE LA RÉUSSITE (null) 06/07/2010 16: 22: 42,805 CampingChecklist [400: 207] if lecture du fichier 2010 -07-06 16: 22: 42.814 CampingChecklist [400: 207] informations sur la localisation/Utilisateurs/Brad/Bibliothèque/Application Support/iPhone Simulator/3.1.3/Applications/E7074D5A-3E7A-4D2E-9F92-82B1A04873F8/Documents/CustomChecklist. plist

Et évidemment, comme il n'y a rien dans le fichier, quand il essaie d'économiser sur la sortie de l'application, il ne crée aucun fichier dans le chemin spécifié.

Si quelqu'un peut faire la lumière sur ce problème, alors je l'apprécierais beaucoup.

Merci Brad

Répondre

3

Lorsque vous chargez votre plist pour la première fois, il vient de l'App Bundle - qui n'est pas accessible en écriture.

Lorsque vous enregistrez vos données, vous les sauvegardez correctement dans le répertoire des documents. Toutefois, lorsque vous chargez à nouveau votre plist la prochaine fois, vous le chargez à nouveau à partir de l'ensemble Appe qui n'a pas été modifié.

Vous devez insérer une logique dans votre code de chargement de plist qui vérifie l'existence du fichier dans le répertoire de documents. S'il existe, chargez-le, sinon chargez celui de l'ensemble de l'application.

Questions connexes