开发者

iPhone SDK NSDictionary and NSArray confusion

开发者 https://www.devze.com 2022-12-15 00:08 出处:网络
I have been trying to get this to work for about three solid days and get my mind around it. Can someone advise.

I have been trying to get this to work for about three solid days and get my mind around it. Can someone advise. I have built the basics and they all work great but when I try to do that extra bit I cannot get my head around it. I am trying to build a table of technical terms, from a plist. This is an indexed and sections table by the alphabet. This works fine but when I then try to add the next level for each term's definition in a new viewcontroller I can't seem to get the code or the plist structure right. At the moment I have created two plists. One with a dictionary of the alphabet in 26 arrays, within each array is a series of technical terms. All this works great. Then I've created another plist of definitions as an array of dictionaries, one for each word/definition pair. I'm expecting to be passing the @"word" key from the view controller to the detailviewcontroller then picking up the @"definition". I don't know whether this is right or wrong(?) My code shows the technical term table great but when a row is selected it crashes. I know it's to do with the code for passing the detailviewcontroller's reference so the detailview can pick up the definition - but I've no idea how to solve it. I've posted parts of my code here for someone to look at help. Any ideas?

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 = 开发者_JS百科[[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 here.......

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


It seems that you are trying to access the members of dictionary by using an index, instead of using a key to lookup the associated value.

In your didSelectRow you probably want this:

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

The difference is that now you are trying access the members of an array with the index.

0

精彩评论

暂无评论...
验证码 换一张
取 消