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: метод, основанный на индексе кнопки.