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中没有该键的数据。