Как передать параметр из метода, который открывает UIAlertView в UIAlertViewDelegate-метод? - PullRequest
1 голос
/ 11 января 2012

Учитывая следующий код:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    if (mainViewController.loggedIn) {

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"test" message:@"notification received. view now?" delegate:self cancelButtonTitle:@"Later" otherButtonTitles: @"Show"), nil];
        NSString *hash = [userInfo objectForKey:@"id"];

        [alert setValue:hash forKey:@"hash"];

        [alert show];
        [alert release];
    }
}

Здесь я пытаюсь установить значение (хэш) для ключа @ "хэш".Я делаю это, потому что мне нужно это хеш-значение в случае, если пользователь нажимает кнопку «Показать».Затем - в методе делегата - я пытаюсь снова прочитать значение:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex == 1) {
        NSString *hash = [alertView valueForKey:@"hash"];
        if (hash != nil) {
            // send hash to server to show the correct site
        }
    }
}

Но как только я вызываю [alert setValue:hash forKey:@"hash"];, мое приложение iphone вылетает.Вот что я вижу в консоли:

* Завершение приложения из-за необработанного исключения «NSUnknownKeyException», причина: «[setValue: forUndefinedKey:]: этот класс не является ключевымЗначение, совместимое с кодировкой для хэша ключа. '

Кто-нибудь имеет представление, что я сделал не так.Или как я могу передать свое значение "хэш" в метод clickedButtonAtIndex?

1 Ответ

2 голосов
/ 11 января 2012

Объявите hash как член класса NSString.Пока вы показываете предупреждение, установите переменную hash.Кроме того, установите tag для alertview.

В методе clickedButtonAtIndex проверьте тег alertview и используйте значение hash, если требуется.

...