iPhone SDK NSDictionary与NSArray混淆

时间:2009-12-24 23:29:30

标签: iphone sdk nsarray plist nsdictionary

我一直试图让它在大约三天的时间里工作,让我开始思考它。有人可以提出建议。 我已经建立了基础知识并且它们都很好用,但是当我尝试做多余的工作时,我无法理解它。 我试图从一个plist建立一个技术术语表。这是一个按字母表排列的索引和部分表。 这工作正常,但当我尝试在新的viewcontroller中为每个术语的定义添加下一个级别时,我似乎无法正确获取代码或plist结构。 目前我创造了两个plist。一个带有26个阵列中字母表的字典,每个阵列中都有一系列技术术语。这一切都很棒。 然后我创建了另一个定义的plist作为字典数组,每个字/定义对一个。我希望将@“word”键从视图控制器传递给detailviewcontroller,然后获取@“定义”。我不知道这是对还是错(?) 我的代码显示了技术术语表很好但是当选择一行时它会崩溃。我知道这与传递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 here .........

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 :(得分:0)

您似乎尝试使用索引访问字典成员,而不是使用键来查找关联值。

在你的didSelectRow中你可能想要这个:

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

不同之处在于您现在尝试使用索引访问数组成员。