2011-04-10 7 views
6

Je ne sais pas exactement quel est mon problème depuis que j'utilise cette méthode depuis un moment maintenant et je n'ai jamais eu ce problème.Tableau ne charge pas les données de plist

Fondamentalement, comme le dit le titre. Ce code charge les données à partir d'un plist situé dans le groupe "Resources"

NSString *myFile = [[NSBundle mainBundle] pathForResource:@"myList" ofType:@"plist"]; 
myArray = [[NSArray alloc]initWithContentsOfFile:myFile]; 
NSLog(@"%@", myArray); 

Il affiche (null). Quelqu'un sait pourquoi?

J'ai dans le même ViewController une autre installation et fonctionne très bien. Ce plist particulier ne charge cependant pas. Et j'ai même effacé le plist et juste créé un double de l'autre pour m'assurer que ce n'est pas un problème de structure.

Je fais cela dans le mauvais sens? Dois-je utiliser FileManager?

MISE À JOUR --------------------------------------------- ----------------------------

Ok donc, je ne peux pas croire ce que je vais dire. lol

J'utilise XCode 4, la façon dont vous éditez les plistes dans Xcode est différente de Xcode 3.x. Comme dans les versions précédentes, vous pouvez choisir la racine des plistes pour que vous les vouliez (Array, Dictionary, etc.) Mon problème était que le plist que j'essayais de charger dans un NSArray était en fait structuré comme un dictionnaire. Cependant, je n'ai jamais vu cela dans Xcode, et je n'ai aucune idée de la façon de le voir autrement que de parcourir le contenu en utilisant TextEdit ou un autre éditeur de texte.

Assez bête je dois dire. Est-ce que quelqu'un sait pourquoi XCode 4 ne montrera pas la racine du plist comme le fait XCode 3.x?

3.x XCode:

XCode 4: http://dl.dropbox.com/u/919254/Screen%20shot%202011-04-10%20at%202.30.35%20AM.png

Répondre

3

Utilisez un dictionnaire à la place. J'ai eu un comportement indéfini avec NSArrays et les listes de propriétés. par exemple.

NSString *myFile = [[NSBundle mainBundle] pathForResource:@"myList" ofType:@"plist"]; 
NSMutableDictionary* myDict = [[NSMutableDictionary alloc]initWithContentsOfFile:myFile]; 
NSLog(@"%@", myDict); 
+0

Cela fonctionne ... même si je ne comprends pas pourquoi.La structure du plist est exactement la même que celle que j'utilise pour le reste de mes fichiers. :( – MrShoot

+1

Vous * ne pouvez pas * utiliser un NSDictionary ou NSMutableDictionary pour charger une plist si l'objet de premier niveau dans le plist est un tableau, et vice versa.Ce n'est pas une question de préférence de l'utilisateur. , le problème d'OP était que l'objet de premier niveau dans le plist sous-jacent était un dictionnaire plutôt qu'un tableau.Si c'est le cas, alors @ManuelDiaz a posté le mauvais exemple de fichier plist – jlehr

+0

Merci pour la clarification. avec Xcode 4. N'a pas remarqué jusqu'à la mise à jour de @Manuel Diaz que Xcode 4 cache la racine de plist. – David

0

Qu'est-ce que vous avez l'air bien. Vérifiez que le fichier se trouve dans le bon répertoire et qu'il contient un contenu. Peut vouloir NSLog myFile pendant que vous y êtes.

+0

Ouais le fichier est dans le bon répertoire. Voici mon journal http://dl.dropbox.com/u/919254/Screen%20shot%202011-04-10%20at%202.30.35%20AM.png et le contenu http://dl.dropbox.com/u /919254/Screen%20shot%202011-04-10%20at%202.33.37%20AM.png – MrShoot

+0

Tout va bien, vérifiez la racine du fichier plist que vous avez posté est un dictionnaire (ressemble à un tableau). Et vous utilisez le bon nom dans votre programme. – Jordan

+0

C'est tellement bizarre, quand je charge le plist dans un dictionnaire, ça ne pose aucun problème. Cependant, la structure est exactement la même que le reste de mes plistes et ils se chargent comme NSArrays! – MrShoot

1

J'avais une situation similaire. Solving:

  1. select * .plist dans l'arbre
  2. appel menu contextuel
  3. sélectionnez "Ouvrir avec l'éditeur externe"
  4. racine sera visible - changement "classe" à "Array"
  5. sauver
Questions connexes