setObject:ForKey:崩溃?

我在控制台中遇到了这个崩溃:

2011-08-27 23:26:45.041 App[1672:3117] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary setObject:forKey:]: attempt to insert nil key' *** First throw call stack: (0x3231c8c3 0x362ee1e5 0x3231c7bd 0x3231c7df 0x32289679 0x3052e865 0x3220fd55 0x3221b7a3 0x3345e4b7 0x3345e38c) terminate called throwing an exception[Switching to process 10243 thread 0x2803] [Switching to process 10243 thread 0x2803] 

我认为在与崩溃相关的崩溃时唯一可以解雇的是这一行:

 UIImage *photo = [self.selectedDictionary objectForKey:@"ProfileImage"]; 

这里有什么不妥吗? 可能是什么问题呢?

Edit1:当我这样做来调用方法时崩溃:代码:

 if(actionSheet.tag == 1) { [self showAchievements]; } 

这是showAchievements方法:代码:

 - (void)showAchievements { GKAchievementViewController *achievements = [[GKAchievementViewController alloc] init]; if (achievements != nil) { achievements.achievementDelegate = self; [self presentModalViewController:achievements animated:YES]; } } - (void)achievementViewControllerDidFinish:(GKAchievementViewController *)viewController { [self dismissModalViewControllerAnimated:YES]; [viewController release]; } 

这次崩溃可能是因为我没有在iTC中正确地搞定所有事情吗? 我肯定肯定它在那种方法中崩溃了,我不知道为什么。

有没有人有任何想法?

编辑2:我正在这里,在我的控制台中,在它崩溃之前它有一条线说错过方法。 所以我搜索这个NSLog的位置,它在GameCenterManager.m中,我认为这是Game Center所必需的文件。 这是方法:

  - (void) callDelegate: (SEL) selector withArg: (id) arg error: (NSError*) err { assert([NSThread isMainThread]); if([delegate respondsToSelector: selector]) { if(arg != NULL) { [delegate performSelector: selector withObject: arg withObject: err]; } else { [delegate performSelector: selector withObject: err]; } } else { NSLog(@"Missed Method"); } } 

那么从那段代码你看到什么错了?

谢谢!

我猜你的答案就在答案中:

 reason: '-[__NSCFDictionary setObject:forKey:]: attempt to insert nil key' 

您不能将nil键插入字典中。 你在做[myDictionary setObject:foo forKey:bar],其中’bar’是零吗?

顺便说一句,您也不能将nil值插入字典中,但这似乎不是错误原因所指示的。 你可以调用[myDictionary setValue:nil forKey:bar] (只要bar不是nil) – 这会从字典中删除密钥。 如果要指示“nil”值,可以将NSNull对象插入字典中。 但键 – 键必须始终是非零的。

从日志中看起来,关键的profileImage等于nil ,这意味着NSDictionary中没有该键的数据。