我有两个UIViewController
,VC1和VC2。 VC1有一个按钮,可以调用触发的Modal segue到VC2。此segue在故事板中定义。在VC2中,用户可以使用执行以下代码行的平移手势返回VC1:
[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
此代码已经工作了很长时间。然而,当这一行运行时,应用程序突然崩溃。我启用了僵尸对象,我可以看到这个错误:
- [VC2 retain]:发送到解除分配的实例0x7f843a81e200的消息
我已经运行了僵尸分析器,结果如下:
UIClassSwapper initWithCoder
似乎是应用程序崩溃的地方,并且似乎有一个过度保留的对象,但我无法继续。当我设置一个异常断点时,我只是进入汇编代码,这不是任何明显的帮助。
所以,这里有几个问题。第一个是我在如何呈现和解雇这个视图控制器时做错了什么?在那之后,我不知道如何破解事件历史记录以弄清楚如何处理这个僵尸对象。
感谢任何帮助。谢谢!
答案 0 :(得分:0)
您似乎使用ARC项目。请提供更多代码:
1.如何初始化presentViewController属性(并声明)。是(非原子的,强大的)?
2.如何将此ViewController放到屏幕上。它是一种模态视图控制器等吗?
- 评论后补充
基于ARC的项目会自动决定是否需要该对象,并自动将其从堆栈中删除。因此,避免此问题的唯一有用的方法是添加NSNotification观察者并一次又一次地发布通知。它将视图控制器保持在堆栈中并避免自动释放。
另一个解决方案 - 检查控制器是否仍在堆栈中:
if (!self.presentingViewController) [[THECONTROLLER alloc] init];
第三个 - 使用一些对象将VC1和VC2声明为类变量,并在需要时将它们显示为模态视图控制器。在这种情况下,只要任何VC出现,对象及其变量就会保持不变。
在任何情况下,都会发生异常,因为ARC认为不再需要VC并自动释放它。