iPhone SDK NSDictionary and NSArray confusion
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.
精彩评论