EXC_BAD_ACCESS при вызове pushViewController - PullRequest
3 голосов
/ 01 марта 2010

У меня есть UITableView внутри UITabBarController.

Когда я звоню

[[self navigationController] pushViewController:myViewController animated:YES];

проблем нет.

Но, когда я звоню по одной и той же линии изнутри UIActionSheetDelegate, например:

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

Я получаю EXC_BAD_ACCESS.

Кажется, что вызов этой строки из другого потока вызывает эту проблему.

Как я могу предотвратить эту проблему EXC_BAD_ACCESS?

(обратите внимание, что myViewController НЕ равен nil или что-то в этом роде)

спасибо!

Ответы [ 4 ]

4 голосов
/ 01 марта 2010

EXC_BAD_ACCESS выдается, когда вы пытаетесь получить доступ к освобожденному объекту, и actionSheet:clickedButtonAtIndex: вызывается в главном потоке, после того как лист действия отклонен, поэтому я предполагаю, что указывается myViewController.

Это не должно быть nil, на самом деле, это проблема. Указанный объект освобождается, но указатель не является nil.

1 голос
/ 23 мая 2015

У меня была похожая проблема. Я исправил это, удалив self.navigationController.delegate = self; из моего контроллера push-представления.

1 голос
/ 10 февраля 2011

У меня просто была та же проблема, и моя заключалась в том, что я не назначал переменную члена самому себе, когда выделил его.

Это вызвало проблему: (myTestViewController является членом класса)

TestViewController* test = [[TestViewController alloc] init];
    myTestViewController = testViewController;
    [testViewController release];
        [[self navigationController] pushViewController:myTestViewController animated:YES];

Но когда я переоделся и помог ученику самому, это сработало.

TestViewController* test = [[TestViewController alloc] init];
    self.myTestViewController = testViewController;
    [testViewController release];
        [[self navigationController] pushViewController:myTestViewController animated:YES];
0 голосов
/ 01 марта 2010

Тпй.

UIActionSheet вызывается из класса с именем: MainRootViewController

myViewController является членом этого класса (MainRootViewController).

Полный код:

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

myViewController = [[myViewController alloc] init];

[[self navigationController] pushViewController:myViewController animated:YES];

 }
...