iPhone SDK NSDictionary和NSArray混淆

iPhone SDK NSDictionary和NSArray混淆,iphone,sdk,nsarray,plist,nsdictionary,Iphone,Sdk,Nsarray,Plist,Nsdictionary,整整三天来,我一直在努力让它发挥作用,并让我的思想围绕着它。有人能给我建议吗。 我已经建立了基础,他们都很好,但当我试图做额外的一点,我不能得到我的头周围。 我正试图从plist中建立一个技术术语表。这是一个按字母表编制的索引和节表。 这很好,但是当我尝试在一个新的viewcontroller中为每个术语的定义添加下一个级别时,我似乎无法获得正确的代码或plist结构。 目前,我已经创建了两个plist。一个是26个数组中的字母词典,每个数组中都有一系列技术术语。所有这些都很有效。 然后我创建了

整整三天来,我一直在努力让它发挥作用,并让我的思想围绕着它。有人能给我建议吗。 我已经建立了基础,他们都很好,但当我试图做额外的一点,我不能得到我的头周围。 我正试图从plist中建立一个技术术语表。这是一个按字母表编制的索引和节表。 这很好,但是当我尝试在一个新的viewcontroller中为每个术语的定义添加下一个级别时,我似乎无法获得正确的代码或plist结构。 目前,我已经创建了两个plist。一个是26个数组中的字母词典,每个数组中都有一系列技术术语。所有这些都很有效。 然后我创建了另一个定义列表作为字典数组,每个单词/定义对对应一个。我希望将@word键从视图控制器传递到detailviewcontroller,然后获取@definition。我不知道这是对还是错 我的代码显示了技术术语表,但当选择一行时,它会崩溃。我知道这与传递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];
我在这里

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"];

似乎您正试图通过使用索引来访问字典的成员,而不是使用键来查找关联的值

在您的didSelectRow中,您可能需要以下内容:

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

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

非常感谢。我相信你是对的。我已经更改了它,代码现在处理到detailcontroller。但我认为它在代码中崩溃了。。NSLog@Glossary详细视图加载启动;self.navigationItem.title=[definition objectForKey:@word];[超级视图下载];好的,我猜你是想得到这个数组项的关键字,单词的定义。我想你可能不太清楚字典和数组的概念。NSArray是对象列表,通常每个数组有多个项。NSDictionary是键对及其关联值。这些钥匙将是独一无二的。例如,整个词典中只有一个关键字=单词。看起来您可能认为每个索引都有一个单词键,这告诉我您可能将数组误认为字典。一个数组可以有无限数量的字典作为其条目。一旦你将一个对象从数组传递到你的细节控制器,你就可以在这个条目中寻找key=这个词。但是上面加载字典的方式看起来不像那种用法。您可能希望像这样加载数组:NSArray tempArray=[[NSArray alloc]initWithContentsOfFile:wordPath];现在,使用objectAtIndex:获得的每个条目都将成为一个独立的字典,您可以根据需要提取密钥对。这是我能用你提供的代码做的最好的了。祝你节日快乐!你的解释对我有两方面的帮助。首先,解决我的问题,其次,更好地理解数组和字典。我现在已经将定义数据更改为数组,然后将其读入我的细节控制器。谢谢,等一下。定义现在确实出现在详细视图中,但似乎仅限于“章节”,因为如果我在“B”章节中选择第二个术语,它会为“A”章节的第二个术语定义提供定义。这在所有章节中都会发生-所有内容都会提供字母A的术语定义。很明显,我应该告诉它哪一部分?但如何?