弹出 UINavigationController 时崩溃

Posted

技术标签:

【中文标题】弹出 UINavigationController 时崩溃【英文标题】:Crashed when pop out of a UINavigationController 【发布时间】:2012-02-12 16:39:31 【问题描述】:

我有几个由导航控制器控制的视图控制器。

例如,viewController A 和 viewController B 都可以将 viewController C 推送到导航堆栈中,并要求 C 进行一些保存(实际上对 C 来说是相同的意思)。

在C的保存方法中,最后一行代码是

[self.navigationController popViewControllerAnimated:YES];

但问题是,

如果我从 A 推送到 C,在我保存一些内容并弹回到 A 之后,一切顺利。

但是如果我将 C 从 B 推到,在我做同样的事情并弹回 B 之后,应用程序崩溃,

通过调试,我发现应用程序崩溃不是在 C 代码中,

但是在 B 的 viewWillAppear 方法之后,我的意思是之后,B 正确运行 viewWillAppear 中的所有代码,

然后在我不知道如何追踪到的地方崩溃。

而且这个错误对我来说很奇怪:

2012-02-13 00:29:30.975 EasyWallet[43116:707] *** Terminating app due to uncaught exception     
'NSInvalidArgumentException', reason: '*** -[__NSCFConstantString stringByAppendingString:]: nil argument'
*** First throw call stack:
(0x344268bf 0x346761e5 0x344267b9 0x344267db 0x35d72121 0x2ce7b 0x2ba75 0x3782f9cb 0x3782eaa9    
0x3782e233 0x377d2d4b 0x3438522b 0x34f16381 0x34f15f99 0x34f1a11b 0x34f19e57 0x34f11d85    
0x343fab4b 0x343f8d87 0x343f90e1 0x3437c4dd 0x3437c3a5 0x30c00fcd 0x377fd743 0x2179 0x2138)
terminate called throwing an exception(gdb) 

我只是不知道如何解决它。

【问题讨论】:

【参考方案1】:

在处理视图控制器和视图的数量时,经常会发生崩溃。不使用ARC时我也遇到了同样的问题。当时我发现最好的出路是使用以下链接进入确切的崩溃。唯一的事情是你需要在控制台仔细分析结果并更好地判断它......

http://www.cocoadev.com/DebuggingAutorelease.html

【讨论】:

感谢关注!我已经修复了,问题出在B的代码上,是因为C弹出B后我没有更新数据,但是我在A中更新了,难怪会崩溃。

以上是关于弹出 UINavigationController 时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationController 作为 iPhone 上的弹出框?

UINavigationController:弹出时释放 ViewController 的内存

当我触摸后退按钮时,为啥 UINavigationController 不弹出 UITableViewController?

UINavigationController 没有在 iPad 上弹出 UINavigationBar 项目

从 UINavigationController 弹出视图会改变设备方向

弹出 UINavigationController 时崩溃