setObject:ForKey: crash?
Je reçois ce crash dans la console:
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]
La seule ligne que je pense, le feu au moment où il se plante qui se rapporte à ce crash est cette ligne:
UIImage *photo = [self.selectedDictionary objectForKey:@"ProfileImage"];
N'a rien de regarder le problème ici? Quel pourrait être le problème?
Edit1:
C'est la plante lorsque je fais ceci pour appeler une méthode:
Code:
if(actionSheet.tag == 1) {
[self showAchievements];
}
C'est le showAchievements méthode:
Code:
- (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];
}
Peut ce crash-être parce que je n'ai pas correctement accroché tout en haut dans les tic? Je suis sûr qu'il se bloque dans la méthode et je ne sais pas pourquoi.
Quelqu'un a une idée?
Edit2: je suis d'ici, dans ma console, juste avant qu'il plante, il a une ligne disant Manqué de Méthode. Donc je recherche d'où cette NSLog est et c'est dans GameCenterManager.m, un fichier nécessaire pour le Jeu de Centre de je pense. Voici la méthode:
- (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");
}
}
Alors à partir de ce code ne vous voyez quoi de mal?
Merci!
Vous devez vous connecter pour publier un commentaire.
Je suppose que la réponse est là, dans le code que vous avez posté le:
Vous ne pouvez pas insérer un néant clé dans un dictionnaire. Faites-vous quelque chose comme [mondictionnaire setObject:foo forKey:bar] où 'bar' est nul?
D'ailleurs, vous aussi vous ne pouvez pas insérer néant valeurs dans un dictionnaire, mais qui ne semble pas être ce que l'erreur de la raison indique. Vous peut appel
[myDictionary setValue:nil forKey:bar]
(tant que la barre n'est pas nul) - cela supprime la clé à partir du dictionnaire. Et si vous souhaitez indiquer une valeur nulle, vous pouvez insérer leNSNull
objet dans un dictionnaire. Mais les touches -- clés doivent toujours être non-nulle.À partir du journal, il semble que la clé de
profileImage
est égal ànil
ce qui signifie qu'il n'existe pas de données pour cette clé dans votre NSDictionary.[dictionary setObject: forKey:]
? Si oui, alors il est certain que la ligne, puis sur la touche ou l'objet est nulle, et vous avez besoin de fixer la valeur nil par la vérification de votre code!