繁体   English   中英

如何找出导致iOS应用崩溃的原因

[英]How to isolate the cause of strange iOS app crash

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

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

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

如果在VCmodalB之前未显示VCmodalA,或者未创建新的核心数据对象,或者未关闭VCmodalB,则不会发生崩溃。 我不知所措'_supportsContentDimensionVariables'的意思或发给谁,尽管它似乎发送给了VCmodalB上的标签(因此,必须引起崩溃,因为调用该标签时是因为视图控制器被解雇)。

我花了数小时在Instruments上四处寻找,看看留下的僵尸,并试图通过注释掉有问题的代码来进行隔离,但是我一直没有成功。 此时,任何提示都将受到欢迎!!

非常感谢!

导致此类错误的主要原因有两个:无法使用ARC和直接访问ivars(尤其是如果您未使用ARC)。 解决这两个问题是避免此类崩溃的最佳方法。

至于调试方法,首先,您要审核对UILabel对象的访问。 如果您有任何指向UILabel ivars,则它们应为strongweak ,切勿assign

您应该确保视图控制器不在屏幕上时不运行代码。 这次崩溃使我认为这是一个可能的问题。 例如,请勿在viewDidLoadinitWithFrame:设置计时器。 viewDidAppear:设置它们,然后在viewWillDisappear:中将它们拆除。 对于KVO或委派,也是如此。 视图控制器管理视图; 如果他们不在屏幕上时正在做某事,则您的设计不正确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM