【发布时间】:2014-03-11 17:10:22
【问题描述】:
在 iOS 7.1 发布之前,我的应用没有任何崩溃。现在在任何removeFromSuperview 方法上,崩溃。例如:我有视图控制器,当我想删除一个视图控制器时,我删除它的所有子视图,然后从堆栈中删除(堆栈:我将视图控制器存储在其中,用于加载新内容并加载以前的内容):
for (UIView *subView in [contentVc subviews])
[subView removeFromSuperview];
我得到了
-[CALayer retain]:消息发送到释放的实例
消息
[actual removeFromParentViewController];
有什么好办法去掉吗?它会释放整个视图控制器及其子视图吗?因为我的应用程序没有崩溃,而不是 removeFromSuperview。我不明白 iOS 7.1 中发生了什么变化。
我如何在没有removeFromSuperview 的情况下删除viewController 中的所有子视图,并且不删除我的ViewController(如果我只想添加新的子视图并删除当前内容)?
更新:
有时会崩溃:
[myactualviewcontroller.view removeFromSuperview];
-[CALayer retain]:消息发送到释放的实例
为什么???
有时如果我尝试从视图控制器视图中删除主子视图,它会发生同样的崩溃:
[mainView removeFromSuperview](mainView是单个UIView,添加到vc.view中)
UPDATE2:(非常详细)
所以,我有一个容器视图。我在这个容器中添加了一个UIViewController.view。我正在向UIViewController.view 添加一个视图作为子视图。这个视图不是本地 uiview,我的意思是,它声明为 implementation{ UIView* mainView } 。当我的 UIViewController 将被释放时,在其 - (void) dealloc { [mainView removeFromSuperview]; [mainView release] [super dealloc];}
在 mainView removeFromSuperview 我的应用崩溃了。
【问题讨论】:
-
我用同样的方式发布子视图,iOS7.1更新没有破坏。也许检查
subView是否为零? (尽管这在技术上应该不是问题) -
潜在的麻烦:
contentVc听起来像一个视图控制器(来自后缀),但你把它当作一个视图。这是故意的吗?那是什么? -
除此之外,这段代码很好;您是否曾经对视图进行过弱或不安全的引用?
-
如果子视图在子视图数组中,子视图怎么可能为零。 (但关闭子视图不是零,我检查了它。)
-
为什么在移除视图控制器的时候感觉需要移除所有的子视图?完全没有必要。
标签: ios objective-c subview ios7.1