Ios ARC将我的对象释放到苹果的某个地方';用户界面库

Ios ARC将我的对象释放到苹果的某个地方';用户界面库,ios,objective-c,crash,automatic-ref-counting,dealloc,Ios,Objective C,Crash,Automatic Ref Counting,Dealloc,我有一个局部变量UINavigationConroller*nav。声明后不超过10行,在同一方法中,它被传递到[自呈现视图控制器:导航动画:是完成:否](self是一个UIViewController)。我知道在这里通过nil是可以的,因为 在交给你之前,一切都很好。然而,当它在那里的时候,ARC会释放它,当苹果的UI库中有东西调用[UINavigationController有点类:,可能是在我的nav对象上时,应用程序很快就会崩溃。以下是控制台输出: 2015-03-20 13:33:50

我有一个局部变量
UINavigationConroller*nav
。声明后不超过10行,在同一方法中,它被传递到
[自呈现视图控制器:导航动画:是完成:否]
self
是一个
UIViewController
)。我知道在这里通过
nil
是可以的,因为

在交给你之前,一切都很好。然而,当它在那里的时候,ARC会释放它,当苹果的UI库中有东西调用
[UINavigationController有点类:
,可能是在我的
nav
对象上时,应用程序很快就会崩溃。以下是控制台输出:

2015-03-20 13:33:50.729 Now[9183:3980870] Presenting view controllers on detached view controllers is discouraged <MyViewController: 0x125042200>.
2015-03-20 13:33:50.730 Now[9183:3980870] *** -[UINavigationController isKindOfClass:]: message sent to deallocated instance 0x12601c6e0
2015-03-20 13:33:50.729现在[9183:3980870]不建议在分离的视图控制器上显示视图控制器。
2015-03-20 13:33:50.730现在[9183:3980870]***-[UINavigationController属于类:]:消息发送到解除分配的实例0x12601c6e0
几天来,我一直在进进出出,浏览这个类和汇编代码,尽可能多地用谷歌搜索,但似乎无法修复它。我剩下的唯一解决方案是在
presentViewController
之前调用
[nav retain]
,然后立即调用
[nav release]
,但ARC禁止这样做。这是一个庞大而古老的项目,所以我们不能仅仅关闭ARC。

如何在使用
nav
表单之前将其释放?

更新:
我已经用僵尸剖析器检查过了。我发现它确实是一个
UINavigationController
,并且确实在UIKit中进行分配:

最能说明问题的是前两行,这两行显示它在分配时从960B立即变为0:

我很抱歉,这看起来很不典型,给我带来了危险。

试试这个

[self.view.window.rootViewController presentViewController:navCon animated:YES completion:nil];

如果您的对象由于某种原因被释放,那么不要依赖它。相反,依赖于窗口的根控制器。

这已解决。事实证明,在最初编写此代码库时,它使用了一个“隐藏”系统,该系统将在字段中保存任何模态
UIViewController
,然后将其关闭。当再次需要时,它将显示隐藏的模式,并
nil
ify隐藏变量


问题在于我是如何处理事情的,不知道这个系统。在直接显示或取消模式时,我无意中设置了这样一种情况,即该系统显示了一个僵尸
UINavigationController
。使用此系统后,它将按预期工作。

第一条日志消息意味着您正在从视图控制器层次结构中不存在的控制器中显示它。你是想在
MyViewController
视图中显示它,还是从子视图控制器中显示它?你确定
0x12601c6e0
nav
的地址吗?非常好的点,会在你尝试僵尸工具查看此对象的保留释放历史后立即检查它们?@newacct是,我正在尝试。通常避免只使用代码的答案。考虑添加<代码>描述< /代码>。谢谢,我为什么要试一下呢?如果你的对象是因为某种原因被释放的,那么不要依赖它。取而代之的是依赖于窗口的根控制器。我已经尝试过了,但似乎没有任何改变。错误仍然会发生。也许根视图控制器是正在解除分配的对象?