UIActionSheet выбрасывает ViewController actionSheet:clickedButtonAtIndex

Я использую XCode 5.1.1 для целей разработки и использую симулятор iOS для тестирования своего приложения. У меня есть лист действий с опциями Сохранить, Отменить и Удалить. Я еще не закодировал обработку действий для Сохранить и Удалить, но нажатие на отмену должно вернуться к предыдущему экрану (я использовал навигационный контроллер для перемещения между экранами). Но, нажав "Отмена", выдает ошибку " ViewController actionSheet: clickedButtonAtIndex:]: сообщение отправлено освобожденному экземпляру ", которую я не могу решить. Я правильно подключил все элементы к их выходам / действиям. Ниже мой код. Пожалуйста помоги. (Я пытаюсь отобразить лист действий, когда нажата кнопка "возврат". А в листе действий, когда я нажимаю "Отмена", должен был отображаться предыдущий экран - я думаю, это можно сделать с помощью dismissViewControllerAnimated, который отклоняет текущий контроллер и отображает предыдущий контроллер.)

 -(IBAction)returnModalAction:(id)sender {

    [self dismissViewControllerAnimated: YES completion: NULL];

    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"What do you want to do with the user values?"
                    delegate:self
                    cancelButtonTitle:nil
                    destructiveButtonTitle:@"Delete"
                    otherButtonTitles:@"Save", nil];
    actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle:@"Cancel"];
    [actionSheet showInView:self.view];
}


-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{


    if (buttonIndex == 2) {
        NSLog(@"You have pressed the %@ button", [actionSheet buttonTitleAtIndex:buttonIndex]);

    }
}

1 ответ

Решение

В вашем методе returnModalAction: вы закрываете представление, поэтому сборщик мусора освобождает все ссылки на себя (контроллер представления) в памяти, поэтому при попытке показать лист действий [actionSheet showInView:self.view]; Вы получаете ошибку, потому что ссылка в памяти не существует.

Так что вам нужно сделать, это выполнить [self dismissViewControllerAnimated: YES completion: NULL]; когда вы действительно хотите отобразить предыдущий экран, в вашем случае это будет на actionSheet:clickedButtonAtIndex: метод, основанный на индексе кнопки.

Другие вопросы по тегам