试图通过回调代码块解除视图控制器,但获得异常

时间:2013-01-25 17:24:11

标签: ios objective-c

我试图从回调代码块中解除所呈现的视图控制器,如下所示。

MyBViewController *bvc = [[MyBViewController alloc] init];

bvc.callBack = ^(void){
   NSLog(@"Dismiss");
   [self dismissViewControllerAnimated:YES completion:Nil];
};

但它抛出了EXC_BAD_ACCESS异常。在异常堆栈中,它似乎在[MyBViewController callback];

我甚至尝试过调用另一种本地方法来解雇1.0秒后会发射的方法。但是得到了同样的错误。

不能通过这样的回调块解散吗?请告诉我。

感谢。

3 个答案:

答案 0 :(得分:0)

我相信在取消分配bvc时可能会调用你的回调。

如果没有看到你的其余代码,我只是假设你的回调函数是在分配了bvc的函数完成后调用的,而ARC可能会清理它。然后在解除分配的对象上触发回调,就是如何获得EXC_BAD_ACCESS。你应该尝试制作bvc属性或iVar,这样它就不会早死。

答案 1 :(得分:0)

作为developer.apple.com sais:“呈现视图控制器负责解除它所呈现的视图控制器。但是,如果您在呈现的视图控制器本身上调用此方法,它会自动将消息转发给呈现视图控制器“。 您可以在[self dismissViewControllerAnimated:YES completion:Nil];内使用MyBViewController而不使用任何块。希望这会对你有所帮助。

答案 2 :(得分:0)

最后我想出来了。我在MyBViewController上的回调属性为'assign'。我通过更改为“复制”来修复此问题。然后它奏效了。