2014-10-09 3 views
0

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

-(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: на основе указателя кнопки.

+0

FYI, в Swift и/или Obj-C нет сборщика мусора. Существует ARC, который НЕ является сборщиком мусора. – TheCodingArt

+0

Большое спасибо, marcos1490, ваш ответ помог мне решить проблему. Теперь я лучше понимаю. Благодаря! – vasupradha

Смежные вопросы