如何找出奇怪的iOS应用程序崩溃的原因

时间:2013-10-09 16:40:41

标签: ios objective-c xcode

我正在努力的应用程序崩溃,我很难找到原因。以下是导致崩溃的唯一一组事件:

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

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

如果在VCmodalB之前未显示VCmodalA,或者未创建新的核心数据对象,或者VCmodalB未被解除,则不会发生崩溃。我不知道'_supportsContentDimensionVariables'是什么意思或者是谁发送它,虽然它似乎被发送到VCmodalB上的标签(因此必须引起崩溃,因为正在调用一个标签,当时该标签被解除分配视图控制器被解雇了。)

我花了好几个小时在看看僵尸留下的仪器,并试图通过评论来隔离有问题的代码,但我完全没有成功。在这一点上任何提示都会受到欢迎!!

非常感谢!

1 个答案:

答案 0 :(得分:1)

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

至于如何调试它,首先,您要审核对UILabel个对象的访问。如果您有任何指向UILabel的ivars应该是strongweak,则永远不会assign

您应该确保视图控制器不在屏幕上时运行代码。这次崩溃让我觉得这可能是个问题。例如,请勿在{{1​​}}或viewDidLoad中设置计时器。在initWithFrame:中设置它们并在viewDidAppear:中将其拆除。同样适用于KVO或代表团。视图控制器管理视图;如果他们的视图不在屏幕上时他们正在做某事,那么你的设计是不正确的。