2011-10-25 3 views
1

Je suis nouveau au développement d'iPhone et ai eu beaucoup de succès avec des réponses d'ici ainsi j'espère recevoir l'aide directement. Je lis des données dans une vue de table d'une plist. L'application fonctionne bien mais j'ai 2 avertissements quand je compile. Je sais pourquoi je reçois les erreurs, mais je n'ai pas réussi à résoudre les problèmes. Bien que cette application fonctionne, je voudrais vraiment résoudre les avertissements de manière efficace. Lorsque j'ai essayé de modifier le NSDictionary à NSArray, l'avertissement disparaît mais la table n'est plus remplie.types de pointeurs incompatibles assignant à nsarray de nsdictionary

Toute aide serait grandement appréciée. Les champs Personnel et Données sont définis comme NSArray dans le fichier Delegate .h.

Les avertissements s'affichent dans le fichier délégué .m ci-dessous.

Mon délégué a les suivantes:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 
    // Add the tab bar controller's current view as a subview of the window 

NSString *Path = [[NSBundle mainBundle] bundlePath]; 
NSString *DataPath = [Path stringByAppendingPathComponent:@"Data.plist"]; 
NSString *SPath = [[NSBundle mainBundle] bundlePath]; 
NSString *StaffPath = [SPath stringByAppendingPathComponent:@"Staff.plist"]; 

NSDictionary *tempDict = [[NSDictionary alloc] initWithContentsOfFile:DataPath]; 
**self.data = tempDict;** 
[tempDict release]; 


    NSDictionary *staffDict = [[NSDictionary alloc]initWithContentsOfFile:StaffPath]; 
    **self.staff = staffDict;** 
    [staffDict release]; 

Dans mon personnel ViewController j'ai les suivantes:

if(CurrentLevel == 0) { 

     //Initialize our table data source 
     NSArray *staffDict = [[NSArray alloc] init]; 
     self.tableDataSource = staffDict; 
     [staffDict release]; 


     Midwest_DigestiveAppDelegate *AppDelegate = (Midwest_DigestiveAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    self.tableDataSource = [AppDelegate.staff valueForKey:@"Rows"];  
} 
else 
    self.navigationItem.title = CurrentTitle; 
+0

Avez-vous résolu ce problème? @Corey Brown Je rencontre le même problème –

Répondre

0

Tout dans votre code suggère que les propriétés du personnel et de données sont des cas NSDictionary. Vous les initialisez aux objets de dictionnaire et vous les référencez comme des objets de dictionnaire. Pourquoi alors les déclarez-vous comme des objets NSArray?

Vous devez modifier la façon dont ils sont déclarés afin qu'ils soient NSDictionary dans votre fichier d'en-tête plutôt que NSArray. Cela me semble la manière la plus logique de supprimer vos avertissements.

Cela devrait toujours fonctionner en supposant que le contenu de votre NSDictionary "staff" a une clé nommée "Rows" dont la valeur est un NSArray. Le code que vous devez initialiser self.tableDataSource avec un vide NSArray semble redondant, comme vous écrasez immédiatement la valeur avec le

self.tableDataSource = [AppDelegate.staff valueForKey:@"Rows"]; 

ligne dans votre code

+0

Merci beaucoup. J'ai essayé ça, avant, et la table est revenue vide mais cette fois ça a marché. –

1

Un NSArray détient une liste dimensionnelle des éléments où un NSDictionary mappe les clés aux valeurs.

Tableau:

[a, b, c]

Dictionnaire:

{@ "a" = @ "premier élément", @ "b" = @ "deuxième élément « }

Pouvez-vous déclarer données NSDictionary *data; et le remplir comme data = [[NSDictionary alloc] initWithContentsOfFile:DataPath];

Vous accédez ensuite aux valeurs du dictionnaire avec [data valueForKey:@"key"]

Questions connexes