0

我正在处理的应用程序发生崩溃,我很难追查其原因。这是导致崩溃的唯一一组事件:

应用程序打开时显示主视图控制器 (VCmain)。触发一个按钮,该按钮通过 segue 打开模态视图控制器 (VCmodalA)。VCmodalA 仅显示收集的有关核心数据对象的一些信息。VCmodalA 然后通过按下按钮解除。在未来的某个时刻,另一个视图控制器以模态方式呈现(VCmodalB),它具有一些用于创建新核心数据对象的字段。创建对象后,如果 VCmodalB 被解除,应用程序崩溃并出现以下错误:

*** -[UILabel _supportsContentDimensionVariables]: message sent to deallocated instance 0x818e200

如果在 VCmodalB 之前没有显示 VCmodalA,或者没有创建新的核心数据对象,或者没有关闭 VCmodalB,则不会发生崩溃。我不知道“_supportsContentDimensionVariables”是什么意思或是谁在发送它,尽管它似乎被发送到 VCmodalB 上的标签(因此必须引起崩溃,因为正在调用一个在视图控制器被解雇)。

我花了几个小时在 Instruments 中四处寻找留下的 Zombie,并试图通过将其注释掉来隔离有问题的代码,但我完全没有成功。在这一点上,任何提示都会受到欢迎!!

非常感谢!

4

1 回答 1

1

此类错误有两个主要原因:未能使用 ARC,以及直接访问 ivars(特别是如果您不使用 ARC)。解决这两个问题是避免此类崩溃的最佳方法。

至于如何调试它,首先,您要审核您对UILabel对象的访问。如果您有任何 ivars 指出UILabel它们应该是strongweak,从不assign

您应该确保视图控制器不在屏幕上时不会运行代码。这次崩溃让我认为这是一个可能的问题。例如,不要在viewDidLoad或中设置计时器initWithFrame:。设置它们viewDidAppear:并拆除它们viewWillDisappear:。对于 KVO 或委托也是如此。视图控制器管理视图;如果他们在他们的视图不在屏幕上时正在做某事,那么您的设计是不正确的。

于 2013-10-09T17:02:09.997 回答