setObject: ForKey: сбой? - PullRequest
       13

setObject: ForKey: сбой?

1 голос
/ 28 августа 2011

Я получаю этот сбой в консоли:

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: я подхожу к этому здесь, в моей консоли, прямо перед тем, как он падает, у него есть строка с надписью Пропущенный метод. Поэтому я ищу, где находится этот 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");
    }
}

Так из этого кода вы видите, что не так?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 28 августа 2011

Я думаю, что ответ прямо в коде, который вы разместили:

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

Вы не можете вставить нулевой ключ в словарь. Вы делаете что-то вроде [myDictionary setObject: foo forKey: bar], где 'bar' равен nil?

Кстати, вы также не можете вставить значения nil в словарь, но это не то, что указывает причина ошибки. Вы можете позвонить [myDictionary setValue:nil forKey:bar] (если такт не равен нулю) - это удаляет ключ из словаря. И если вы хотите указать значение «nil», вы можете вставить объект NSNull в словарь. Но ключи - ключи должны всегда быть ненулевыми.

1 голос
/ 28 августа 2011

Из журнала кажется, что ключ profileImage равен nil, что означает, что в вашем NSDictionary нет данных для этого ключа.

...