3

我有一个UITableView里面的UITabBarController

当我打电话时

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

没有问题。

但是,当我从 a 内部调用同一行时UIActionSheetDelegate,例如:

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

我明白了EXC_BAD_ACCESS

似乎从导致此问题的不同线程调用此行。

我怎样才能防止这个EXC_BAD_ACCESS问题?

(注意 myViewController 不是 nil 或类似的东西)

谢谢!

4

4 回答 4

4

EXC_BAD_ACCESS当您尝试访问已释放的对象时抛出,并actionSheet:clickedButtonAtIndex:在操作表被解除后在主线程上调用,所以我猜测所指向的myViewController内容已被释放。

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

于 2010-03-01T15:43:14.923 回答
1

我只是遇到了同样的问题,而我的问题是我在分配成员变量时没有将其与 self 关联。

这导致了一个问题:(myTestViewController 是类成员)

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

但是当我改变并用 self 帮助班级成员时,它起作用了。

TestViewController* test = [[TestViewController alloc] init];
    self.myTestViewController = testViewController;
    [testViewController release];
        [[self navigationController] pushViewController:myTestViewController animated:YES];
于 2011-02-10T09:13:23.583 回答
1

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

于 2015-05-23T18:06:58.010 回答
0

tnx。

UIActionSheet 从名为 MainRootViewController 的类中调用

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

完整的代码是:

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

myViewController = [[myViewController alloc] init];

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

 }
于 2010-03-01T15:56:15.900 回答