removeFromSuperview 的 EXC_BAD_ACCESS - 使用 ARC
Posted
技术标签:
【中文标题】removeFromSuperview 的 EXC_BAD_ACCESS - 使用 ARC【英文标题】:EXC_BAD_ACCESS at removeFromSuperview - using ARC 【发布时间】:2012-07-30 22:22:50 【问题描述】:在我的一个 ViewControllers (ViewController A) 中,我有以下代码:
AlertViewController *aViewController = [[AlertViewController alloc] initWithNibName:@"AlertViewController" bundle:nil];
[self.view addSubview:[aViewController view]];
[self.view bringSubviewToFront:[aViewController view]];
在 AlertViewController 中,我有一个按钮,当用户点击它时,我有:
[self.view removeFromSuperview];
每当我单击按钮时,结果都是 EXC_BAD_ACCESS。 我无法弄清楚问题所在。如果该信息有帮助,我的项目正在使用 ARC,并且 ViewController A 是导航控制器堆栈的一部分。
【问题讨论】:
您无法从其超级视图中删除self.view
。你想隐藏什么视图?
@Rickay 我试图在 AlertViewController 的 xib 中隐藏整个视图
如果你想隐藏视图,那么就使用self.view.hidden = YES
,但老实说,如果隐藏视图控制器的视图在它下面显示了一些东西,那么你没有正确使用视图控制器。
【参考方案1】:
这里的问题是 UIView 不拥有它的 UIViewController。在第一个代码块中,您通过将 UIView 添加到子视图来保留它,但让 UIViewController 消失。 UIViewController 中的 UIView 很特殊,不能让这种情况发生。
确保创建 UIView 的 UIViewController 与视图一样长。
【讨论】:
通常你会通过将你的viewController作为一个孩子添加到拥有的VC中来做到这一点。[self addChildViewController:aViewController];
我将 aViewController 设为 ivar,这就是我可以保留它的方式。现在可以使用了。以上是关于removeFromSuperview 的 EXC_BAD_ACCESS - 使用 ARC的主要内容,如果未能解决你的问题,请参考以下文章