2009-07-13 8 views
0

J'essaye d'obtenir un tableau d'une plist comme suggéré sur une réponse ici mais cela ne fonctionne pas. Quelqu'un peut-il me dire ce que je manque?Tableau de iPhone plist

Voici à quoi ressemble le plist .... une autre chose étrange est que je ne peux pas obtenir cela pour ouvrir dans un fichier texte brut? quand je fais ressemble à ordures ..... mais il semble bien dans l'éditeur de liste de propriétés:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
<key>count</key> 
<array> 
    <integer>5</integer> 
</array> 
<key>username</key> 
<array> 
    <string>johnsmith</string> 
</array> 
</dict> 
</plist> 

Voici le code que je utilise ..... le dictionnaire est un NSMutableDictionary et accountsArray est un NSMustableArray qui se trouvent dans le fichier .h

 NSMutableDictionary *tempDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath]; 

dictionary = tempDictionary; 
[tempDictionary release]; 


NSMutableArray *nameArray = [[NSMutableArray alloc] init]; 
nameArray = [dictionary objectForKey:@"username"]; 

accountsArray = nameArray; 

[nameArray release]; 

Ai-je raté quelque chose? Visser quelque chose?

Merci ...

Répondre

0

Je suis enfin fonctionner comme ceci:

dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath];  


if (accountsArray == nil){ 

    accountsArray = [[NSMutableArray alloc]init]; 
} 

if (countArray == nil){ 

    countArray = [[NSMutableArray alloc]init]; 
} 



countArray = [dictionary objectForKey:@"count"]; 
accountsArray = [dictionary objectForKey:@"username"]; 
+0

en fait, j'utilisé ceci: \t if (accountsArray == nil) { \t \t \t \t accountsArray = [[[NSMutableArray alloc] init] autorelease]; \t} \t \t if (countArray == nil) { \t \t \t \t countArray = [[[NSMutableArray alloc] init] autorelease]; \t} – Xcoder

+0

-1. Ne faites pas cela. ce code est faux de tous les points de vue. – shader

+0

Qu'est-ce qui ne va pas avec le code? – icant

5

Eh bien, un certain nombre de problèmes se posent; tout d'abord, le plist est probablement une liste de propriétés binaires, et pas réellement une liste de propriétés XML. Cela n'a pas beaucoup d'importance du point de vue du code, mais devrait servir à expliquer les problèmes avec l'ouverture en texte brut. Deuxièmement, en libérant tempDictionary, vous libérez également dictionary, car ils pointent tous les deux vers le même objet. Cela devrait servir à expliquer pourquoi votre code ne fonctionne pas. Essayez autorelease, ou simplement dictionaryWithContentsOfFile: et supprimez la phrase de libération. (dictionaryWithContentsOfFile: va automatiquement libérer sa valeur de retour.)

Vous répétez également l'erreur de publication sur la deuxième phrase; l'opérateur d'affectation (=) ne copie pas en Objective-C; attribue.

Éditer: Ce dernier n'est pas vrai lors de l'utilisation de la notation de propriété; en supposant que les propriétés sont définies; self.accountsArray = nameArray copiera (probablement) le tableau dans l'objet.

remodifier: code correct:

dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath]; 
accountsArray = [dictionary objectForKey:@"username"]; 
+0

Je fais cela maintenant et je suis maintenant écraser .... \t dictionnaire = [NSMutableDictionary dictionaryWithContentsOfFile: accountsFilePath]; \t \t if (accountsArray == nil) { \t \t \t \t accountsArray = [[NSMutableArray alloc] init]; \t} \t \t \t NSMutableArray * tabNoms = [[NSMutableArray alloc] init]; NameArray = [dictionnaire objectForKey: @ "nom_utilisateur"] \t \t \t \t accountsArray = nameArray; \t \t [nomTable]; – Xcoder

Questions connexes