我试图从回调代码块中解除所呈现的视图控制器,如下所示。
MyBViewController *bvc = [[MyBViewController alloc] init];
bvc.callBack = ^(void){
NSLog(@"Dismiss");
[self dismissViewControllerAnimated:YES completion:Nil];
};
但它抛出了EXC_BAD_ACCESS异常。在异常堆栈中,它似乎在[MyBViewController callback];
中我甚至尝试过调用另一种本地方法来解雇1.0秒后会发射的方法。但是得到了同样的错误。
不能通过这样的回调块解散吗?请告诉我。
感谢。
答案 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'。我通过更改为“复制”来修复此问题。然后它奏效了。