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的主要内容,如果未能解决你的问题,请参考以下文章

如何删除此 EXC_BAD 访问错误?

出口集合 removefromsuperview

removeFromSuperview 随机崩溃

removeFromSuperview() 耗时过长

removeFromSuperview() 并不总是有效

关于removeFromSuperview