2010-09-23 6 views
0

Je suis coincé dans une ornière sur l'implémentation d'un plist tronqué dans un UITableView.UITableView Plist Not Returning valueForKey

Ma configuration de plist est la suivante. J'ai un tableau racine avec des dictionnaires représentant des sections. Ces dictionnaires ont une seule chaîne 'nom de section' qui dicte l'en-tête de la section ainsi qu'un tableau de dictionnaires à l'intérieur pour représenter les cellules (la raison en était de permettre le comptage des cellules et un en-tête de section).

Root - Array 
    Item 0 - Dictionary 
     sectionname - string - A 
     RowsInSection - Array 
      Item 0 - Dictionary 
      name - string - Adam 
      Item 1 - Dictionary 
      name - string - Andrew 
    Item 1 - Dictionary 
     sectionname - string - B 
     RowsInSection - Array 
      Item 0 - Dictionary 
      name - string - Belle 
      Item 1 - Dictionary 
      name - string - Bob 
    Item 3 - Dictionary 

[Et ainsi de suite].

Maintenant, tout semble fonctionner, les en-têtes correctement nommés sont là et le nombre correct de lignes est sous leurs sections. Cependant, les lignes n'ont pas d'étiquettes et pour la vie de moi je ne peux pas comprendre pourquoi.

J'ai un NSMutableArray du plist

libraryContent = [[NSMutableArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:libraryPlist ofType:@"plist"]]; 

Le nombre de lignes dans la section est thusly.

NSInteger count = [[[[doa libraryContent] objectAtIndex:section] valueForKeyPath:@"[email protected]"]intValue]; 
return count; 

Et les titres pour les en-têtes.

return [[[doa libraryContent] objectAtIndex:section] objectForKey:@"sectionname"]; 

J'ai essayé avec ce qui suit en vain. Je suis encore en train d'apprendre et c'était un peu bâclé ensemble à partir de différents endroits. La méthode 'doa' est liée à un autre fichier où le 'libraryContent' est déclaré.

Est-ce que vous avez une idée de comment obtenir les noms du plist? Ou d'autres méthodes pour faire ce que j'essaie de faire?

Répondre

0

Essayez ce code:

cell.textLabel.text = [[[[[doa libraryContent] objectAtIndex:indexPath.section] objectForKey:@"RowsInSection"] objectAtIndex:indexPath.row] objectForKey:@"name"]; 

EDIT
De cette façon, le code sera plus lisible:

NSDistionary *sectionDataDict = [[doa libraryContent] objectAtIndex:indexPath.section]; 
NSArray *sectionRowsArray = [sectionDataDict objectForKey:@"RowsInSection"]; 
NSDictionary *rowDataDict = [sectionRowsArray objectAtIndex:indexPath.row]; 
cell.textLabel.text = [rowDataDict objectForKey:@"name"]; 
+0

Merci pour cela, il a parfaitement fonctionné. J'avais essayé un million de variations différentes et j'étais si près de le résoudre. Encore une fois, merci pour l'aide. – Ryan

+0

Heureux que je puisse vous aider. J'apprécierai si vous accepterez la réponse. –