J'ai essayé de faire fonctionner ceci pendant environ trois jours pleins et obtenir mon esprit autour d'elle. Quelqu'un peut-il conseiller. J'ai construit les bases et elles fonctionnent toutes très bien mais quand j'essaye de faire un peu plus, je n'arrive pas à comprendre. J'essaie de construire une table de termes techniques, à partir d'un plist. Ceci est une table indexée et des sections par l'alphabet. Cela fonctionne très bien mais quand j'essaye d'ajouter le niveau suivant pour la définition de chaque terme dans un nouveau viewcontroller je ne peux pas sembler obtenir le code ou la structure de plist juste. En ce moment j'ai créé deux plistes. Une avec un dictionnaire de l'alphabet dans 26 tableaux, dans chaque tableau est une série de termes techniques. Tout cela fonctionne très bien. Ensuite, j'ai créé une autre liste de définitions sous la forme d'un tableau de dictionnaires, un pour chaque paire mot/définition. Je m'attends à passer la clé @ "word" du contrôleur de vue au detailviewcontroller puis à récupérer la @ "définition". Je ne sais pas si c'est vrai ou faux (?) Mon code montre le tableau technique génial mais quand une ligne est sélectionnée, elle plante. Je sais que ça a à voir avec le code pour passer la référence de detailviewcontroller afin que detailview puisse prendre la définition - mais je n'ai aucune idée de comment la résoudre. J'ai posté des parties de mon code ici pour que quelqu'un regarde l'aide. Des idées?SDK de l'iPhone NSDictionary et la confusion de NSArray
NSString *wordPath = [[NSBundle mainBundle] pathForResource:@"newsortedglossary" ofType:@"plist"];
NSDictionary *wordDict = [[NSDictionary alloc] initWithContentsOfFile:wordPath];
self.words = wordDict;
[words release];
NSArray *wordArray = [[words allKeys] sortedArrayUsingSelector:@selector(compare:)];
self.wordKeys = wordArray;
NSString *definitionPath = [[NSBundle mainBundle] pathForResource:@"newnewdefinitionglossary" ofType:@"plist"];
NSDictionary *definitionDict = [[NSDictionary alloc] initWithContentsOfFile:definitionPath];
self.definitions = definitionDict;
[definitions release];
didSelectRow ici .........
GlossaryDetailViewController *glossaryDetailViewController = [[GlossaryDetailViewController alloc]
initWithNibName:@"GlossaryDetailView" bundle:nil];
NSLog(@"did select-2"); // CRASHES HERE with NSDictionary may not respond to objectAtIndex
glossaryDetailViewController.definition = [self.words objectAtIndex:indexPath.row];
NSLog(@"did select-3");
[self.navigationController pushViewController:glossaryDetailViewController animated:YES];
NSLog(@"did select-4");
[glossaryDetailViewController release];
detailViewController ici .......
- (void)viewDidAppear:(BOOL)animated {
NSLog(@"didappear");
self.glossaryWordDefinition.text = [definition objectForKey:@"definition"];
Merci beaucoup. Je suis sûr que tu as raison. Je l'ai changé et le code traite maintenant jusqu'au detailcontroller. Mais alors je pense qu'il se bloque là, dans le code .. NSLog (@ "Détails du glossaire viewDidLoad start"); \t self.navigationItem.title = [définition objetForKey: @ "mot"]; [super viewDidLoad]; –
Ok, donc je suppose que vous essayez d'obtenir la définition de la clé, "mot" pour cette entrée de tableau. Je pense que vous pouvez être un peu flou sur le concept de dictionnaire par rapport aux tableaux. NSArrays sont une liste d'objets, généralement plus d'un élément par tableau. Les NSDictionary sont des paires de clés et leurs valeurs associées. Les clés vont être uniques. Par exemple, il n'y aura qu'une seule clé = "mot" dans le dictionnaire entier. Il semble que vous pensiez qu'il existe une clé "word" pour chaque index, et cela me dit que vous pourriez confondre un tableau avec un dictionnaire. – mahboudz
Un tableau peut contenir un nombre illimité de dictionnaires. Et une fois que vous passez un objet du tableau à votre contrôleur de détail, vous pouvez rechercher la clé = "mot" dans cette entrée. Mais la façon dont vous avez chargé le dictionnaire ci-dessus ne ressemble pas à ce genre d'utilisation. Vous voulez probablement charger votre tableau comme ceci: NSArray tempArray = [[NSArray alloc] initWithContentsOfFile: wordPath]; Maintenant, chaque entrée que vous obtenez avec objectAtIndex: va être un dictionnaire indépendant et vous pouvez extraire vos paires de clés comme vous le souhaitez. C'est le meilleur que je peux faire avec le code que vous avez fourni. – mahboudz