2011-02-16 3 views
2

Je veux écrire un tableau à une plist qui fonctionne bien lorsque je crée manuellement le plist dans le dossier de documents.créer un fichier plist

mais quand je vérifie si le plist existe et sinon de le créer de la plist dans le principal rien bundle se .....

je l'ai fait comme dans le Property List Programming Guide il est écrit.

NSString *plistRootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *plistPath = [plistRootPath stringByAppendingPathComponent:@"list.plist"]; 

if (![[NSFileManager defaultManager] fileExistsAtPath:plistPath]) { 

    plistPath = [[NSBundle mainBundle] pathForResource:@"list" ofType:@"plist"]; 

} 

Qu'est-ce que j'ai raté?

modifier:

I tryed la fonction dans une application séparée et cela a fonctionné. Je tryed à nouveau:

NString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *plistPath = [rootPath stringByAppendingPathComponent:@"list.plist"]; 

self.ListArray = [NSMutableArray arrayWithContentsOfFile:plistPath]; 
NSLog(@"preSave: %@", [ListArray count]); 
NSLog(@"%@", plistPath); 

et le journal dit:

2011-02-16 16:54:56.832 ListApp[3496:207] .../Library/Application Support/iPhone Simulator/4.0.2/Applications/267F55E4-A46A-42E0-9E1C-EAF26846F75F/Documents/list.plist 

mais il n'y a pas de fichier dans la Dir.!

+0

code manquant où vous créez réellement votre tableau? quelque chose comme array = [NSArray arrayWithContentsOfFile: plistPath]? – Vladimir

+0

Le testez-vous dans un simulateur ou sur l'appareil? Pouvez-vous NSLog plistPath et coller ici? –

+0

Vous devrez ajouter plus d'informations. Essayez d'ajouter quelques NSLog de plistPath et d'afficher la sortie. Êtes-vous sûr que le fichier "list.plist" est dans votre projet XCode? –

Répondre

0

J'ai essayé le code sur un autre mac et là ça marche C'est le même projet. Quelqu'un peut-il m'expliquer pourquoi le plist est créé sur un mac mais pas sur l'autre?

sur l'IPhone aussi aucun plist n'est écrit?

Je pense que dans les deux cas, cela est une cause du tableau que j'écris au plist est vide:

NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *plistPath = [rootPath stringByAppendingPathComponent:@"list.plist"]; 
NSMutableArray *currentArray = [[NSMutableArray alloc] initWithContentsOfFile:plistPath]; 
NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
      [selectet valueForKey:NAME], @"name", 
      nil]; 

NSLog(@" DIC. : %@", dictionary); 
[currentArray addObject:[dictionary copy]]; 
NSLog(@" %@", currentArray); 
[currentArray writeToFile:plistPath atomically:YES]; 
[currentArray release]; 

le dictionnaire a l'entrée, mais currentArray est vide .... Et encore il fonctionne sur un Mac . mais pas de l'autre et sur l'iPhone.

Edit:

Pour une raison quelconque, il a travaillé à nouveau.

Pour être sûr que j'ai supprimé le plist du dossier de document et effacé toutes les cibles.

Et maintenant le problème comme avant je peux seulement écrire le plist quand j'écris le dictionnaire mais je peux seulement enregistrer le dernier. Et la lecture du plist ne fonctionnera pas non plus.

Quelqu'un peut-il me dire pourquoi cela se produit et comment je peux le résoudre?

Edit 2:

J'ai trouvé le problème: puisque X-Code ne crée pas le plist quand j'écris le tableau avec le dictionnaire au plist.When j'ai écrit le dictionnaire au plist SOx -Code crée le plist mais avec un dictionnaire Root donc je ne peux pas écrire le tableau et je ne peux pas le lire dans un tableau .....

J'ai créé une plist dans le dossier Resources avec une racine Array et le copier quand il n'existe pas de dossier de documents et maintenant cela fonctionne .....

est pas étonnant comment ces choses faciles peuvent vous donner un mal de tête

2
NSString *DocPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 

filePath=[DocPath stringByAppendingPathComponent:@"AlarmClock.plist"]; 

if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) 
{ 
    NSString *path=[[NSBundle mainBundle] pathForResource:@"AlarmClock" ofType:@"plist"]; 
    NSLog(@"file path: %@",filePath); 
    NSDictionary *info=[NSDictionary dictionaryWithContentsOfFile:path]; 
    [info writeToFile:filePath atomically:YES]; 
} 

// * * * Essayez ceci ...