调用pushViewController时EXC_BAD_ACCESS

时间:2010-03-01 15:34:38

标签: iphone uitableview exc-bad-access uiactionsheet

我在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 个答案:

答案 0 :(得分:4)

当您尝试访问已释放的对象时会抛出

EXC_BAD_ACCESS,并且在操作表被取消后在主线程上调用actionSheet:clickedButtonAtIndex:,所以我猜测{{1}指向的是什么发布了。

事实上,它不一定是myViewController,这就是问题所在。指向的对象被释放,但指针不是nil

答案 1 :(得分:1)

我只是遇到了同样的问题,而我的意思是当我分配它时,我并没有将自己的成员变为自我。

这导致了一个问题:( 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];

答案 2 :(得分:1)

我有类似的问题。我修复它的方法是从推送的视图控制器中删除self.navigationController.delegate = self;

答案 3 :(得分:0)

TNX。

从名为:MainRootViewController

的类中调用UIActionSheet

myViewController是此类中的一个成员(MainRootViewController)。

完整的代码是:

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

myViewController = [[myViewController alloc] init];

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

 }