iPhone SDK NSDictionary и NSArray путаница - PullRequest
0 голосов
/ 25 декабря 2009

Я пытался заставить это работать в течение приблизительно трех дней и сосредоточиться на этом. Может кто-нибудь посоветовать. Я построил основы, и все они отлично работают, но когда я пытаюсь сделать это, я не могу обдумать это. Я пытаюсь составить таблицу технических терминов из списка. Это индексированная таблица разделов по алфавиту. Это прекрасно работает, но когда я пытаюсь добавить следующий уровень для определения каждого термина в новом viewcontroller, я не могу понять, что код или структура plist правильные. На данный момент я создал два списка. Один со словарем алфавита в 26 массивах, в каждом массиве есть ряд технических терминов. Все это прекрасно работает. Затем я создал еще один список определений в виде массива словарей, по одному для каждой пары слово / определение. Я ожидаю, что передам ключ @ "word" от контроллера представления к контроллеру detailview, а затем заберу @ "определение". Я не знаю, правильно это или неправильно (?) Мой код отлично показывает таблицу технических терминов, но при выборе строки происходит сбой. Я знаю, что это связано с кодом для передачи ссылки на detailviewcontroller, чтобы detailview мог подобрать определение - но я понятия не имею, как его решить. Я разместил здесь части своего кода, чтобы кто-то мог взглянуть на помощь. Есть идеи?

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 здесь .........

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 здесь .......

- (void)viewDidAppear:(BOOL)animated {
NSLog(@"didappear");
self.glossaryWordDefinition.text = [definition objectForKey:@"definition"];

1 Ответ

0 голосов
/ 25 декабря 2009

Кажется, что вы пытаетесь получить доступ к членам словаря с помощью индекса, а не с помощью ключа для поиска связанного значения.

В вашем didSelectRow вы, вероятно, хотите это:

glossaryDetailViewController.definition = [self.wordKeys objectAtIndex:indexPath.row];

Разница в том, что теперь вы пытаетесь получить доступ к членам массива с индексом.

...