0

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

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

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

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

我什至尝试调用另一个本地方法来关闭它会在 1.0 秒后触发。但是得到了同样的错误。

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

谢谢。

4

3 回答 3

0

我相信在释放 bvc 时可能会调用您的回调。

在没有看到其余代码的情况下,我只是假设在分配 bvc 的函数完成后调用回调函数,并且 ARC 可能会清理它。然后在释放的对象上触发回调,这就是您获得 EXC_BAD_ACCESS 的方式。您应该尝试使 bvc 成为属性或 iVar,这样它就不会过早死亡。

于 2013-01-25T17:28:20.567 回答
0

正如 developer.apple.com 所说:“呈现视图控制器负责关闭它呈现的视图控制器。但是,如果您在呈现的视图控制器本身上调用此方法,它会自动将消息转发到呈现视图控制器。” 您可以在不使用任何块的情况下使用[self dismissViewControllerAnimated:YES completion:Nil];内部。MyBViewController希望这会帮助你。

于 2013-01-25T17:33:06.600 回答
0

最后我想通了。我将 MyBViewController 上的回调属性设置为“分配”。我通过更改为“复制”来解决这个问题。然后它起作用了。

于 2013-01-26T02:36:17.983 回答