【问题标题】:UIKit: [UIViewController mutableChildViewControllers] crash?UIKit:[UIViewController mutableChildViewControllers] 崩溃?
【发布时间】:2012-04-03 02:25:01
【问题描述】:

我最近收到了来自 iTunes Connect 的崩溃报告。实际上,这是我从成千上万的用户那里得到的唯一一份崩溃报告。这是一个 iPod4,1 设备。有趣的部分是:

Date/Time:       2012-02-27 22:53:27.596 +0800
OS Version:      iPhone OS 5.0.1 (9A405)
Report Version:  104

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread:  0

Last Exception Backtrace:
0   CoreFoundation                  0x338958bf __exceptionPreprocess + 163
1   libobjc.A.dylib                 0x303891e5 objc_exception_throw + 33
2   UIKit                           0x31259749 -[UIViewController mutableChildViewControllers] + 1
3   UIKit                           0x31259349 -[UINavigationController pushViewController:animated:] + 37
4   MyApp                           0x000081e5 -[MyListController tableView:didSelectRowAtIndexPath:] (MyListController.m:207)
5   UIKit                           0x312d3565 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 945
6   UIKit                           0x3134bce7 -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 159

似乎在选择从表视图中的行时发生崩溃,并将新视图控制器推入导航。根据我的代码,新的视图控制器已经创建,所以崩溃发生在UINavigationController

这看起来不像是我写的代码的错。我想知道我是否正确?如何调试这个问题?

【问题讨论】:

  • 我正在探索一个相同的崩溃(iOS 5.1 除外),但到目前为止没有运气。
  • @Jason iPod 也会发生这种情况吗?我有另一个与低内存警告有关的崩溃报告也只在 iPod 上发生过一次。
  • 在我的情况下它是一个 iPad...有没有找到任何解决方案?
  • 从崩溃日志来看,问题似乎源于 myListViewController.m 中第 207 行的调用,显然在 tableView:didSelectRowAtIndexPath: 方法中。它很可能试图推送一个不再在内存中的视图控制器。您可以在 myListViewController 类中发布 tableView:didSelectRowAtIndexPath: 方法中的代码吗?
  • 仅供参考,我觉得你的语气有点粗鲁;请考虑我正在尝试提供帮助。我的意思是:如果您将问题放入您的应用并发布更新,那么如果它再次发生,您将获得相关信息。

标签: objective-c ios xcode crash crash-reports


【解决方案1】:

听起来用户收到了内存不足的警告。 UINavigationControllers 将保留它们的视图,而选项卡式控制器将弹出不可见的视图。但是,仍然会调用低内存代码。在到达该地点之前检查您的警告处理程序。此外,通过在所有入口和出口点点击硬件菜单下的“模拟内存警告”进行测试。 http://forums.macrumors.com/showthread.php?t=876419 显示了当你不这样做时会发生什么。 iphonedevsdk.com/forum/iphone-sdk-development/14225-uinavigationcontrollers-and-didreceivememorywarning.html 对如何处理这个问题有一个很好的评论。

我打赌你的视图控制器会加载一些东西并导致内存警告。确保用户不能只是将大量项目堆叠在一起,并确保对您的应用进行分析以消除尽可能多的泄漏以保持应用正常运行。

以上内容可能不符合要求,但应该是相关的。

最后一点,不要使用 ARC。不允许调用超类函数的东西肯定会搞砸。如果您了解桥接核心基础,那么也许 ARC 就可以了。我个人不惜一切代价避免它 b/c 内存被 Apple 的底层随机处理。我已经看到他们的东西失败太多了

【讨论】:

  • 感谢您的指点。事实上,内存警告模拟不会触发此崩溃。我的应用程序本身的内存占用非常小。我上次分析时它只使用了大约 6MB 的 RAM。我确实使用ARC。某些内存可能会延迟释放。但它不像达到 24MB 的障碍。
  • 听起来这是一种罕见的情况,其中一些东西刚刚崩溃了其他东西的 b/c,或者用户是能够做到这一点的一小部分。发生了,呵呵。如果您的 Shark 工具说内存不足,我不会担心,即使泄漏也不会影响它,直到它随着时间的推移而堆积。祝你好运,我看到你在其他 cmets 中使用了更好的日志工具,应该很方便
【解决方案2】:

我明白了!我也遇到了同样的问题,在你的代码中看起来像按下了一个按钮,这会导致崩溃!

Last Exception Backtrace:
0   CoreFoundation                  0x338958bf __exceptionPreprocess + 163
1   libobjc.A.dylib                 0x303891e5 objc_exception_throw + 33
2   UIKit                           0x31259749 -[UIViewController mutableChildViewControllers] + 1
3   UIKit                           0x31259349 -[UINavigationController pushViewController:animated:] + 37
4   MyApp                           0x000081e5 -[MyListController tableView:didSelectRowAtIndexPath:] (MyListController.m:207)
5   UIKit                           0x312d3565 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 945
6   UIKit                           0x3134bce7 -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 159

这是我的建议:

解决 SIGABRT 的两件事:

1) SIGABRT 由于未捕获的运行时异常而发生。发生这种情况时,会向调试器控制台或设备控制台写入一些信息,以解释异常的确切原因。你还没有给我们看这段文字。它开始“由于...而终止应用程序”

向我们展示该文本。

2) 如果您在调试器中运行您的应用程序并在异常抛出函数上设置断点,则应用程序将在抛出异常时停止,这通常足以解决问题。转到调试器断点窗格,左下角是一个控件,单击该控件可以设置异常断点。

【讨论】:

  • 嗯...恐怕你误读了我的问题。崩溃报告是从 iTunes 连接中检索到的,它是原样的。没有控制台访问权限,否则我会看到更多信息。我不得不说没有涉及任何按钮,这是一个列表视图和一个单元格。你提到你遇到了类似的问题,但你没有具体说明你是如何解决这个问题的。
  • 好吧,现在我必须从不同的角度来看待它...itunes 连接?可能是 void 错误的原因......也许......好吧,我不是 Xcode 中的笨蛋......我正在学习......对不起,如果我不能帮助查看开发人员。论坛一定有线索!
  • 好吧,他的第 1 点是正确的,但我猜 iTunes 不会附加日志?...我会投票支持 indexOutOfBounds :) -- 您是否在应用程序的任何地方手动修改 viewControllers 堆栈?
猜你喜欢
  • 2014-04-10
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多