1

コンソールでこのクラッシュが発生しています:

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にすべてを適切に接続していないことが原因である可能性がありますか?私はそれがそのメソッドでクラッシュすることを間違いなく確信しています、そして私は理由がわかりません。

誰かアイデアはありますか?

Edit2:ここで、コンソールで、クラッシュする直前に、MissedMethodという行が表示されています。そこで、このNSLogがどこにあるかを検索します。これは、GameCenterに必要なファイルであるGameCenterManager.mにあります。方法は次のとおりです。

    - (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");
    }
}

それで、そのコードから、何が悪いのかわかりますか?

ありがとう!

4

2 に答える 2

3

答えはあなたが投稿したコードの中にあると思います:

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

nilキーを辞書に挿入することはできません。[myDictionary setObject:foo forKey:bar]のようなことをしていますか?ここで「bar」はnilですか?

ちなみに、辞書にnil値を挿入することもできませんが、それはエラーの理由が示しているものではないようです。(barがnilでない限り)呼び出すことができます-これにより、辞書からキーが削除されます。また、「nil」の値を指定する場合は、オブジェクトを辞書に[myDictionary setValue:nil forKey:bar]挿入できます。NSNullただし、キー-キーは常にnil以外である必要があります。

于 2011-08-28T04:29:51.407 に答える
1

profileImageログから、キーが等しいように見えますnil。これは、NSDictionaryにそのキーのデータがないことを意味します。

于 2011-08-28T03:43:39.633 に答える