iOS4.3模拟器中的iOS5稳定应用程序崩溃

Posted

技术标签:

【中文标题】iOS4.3模拟器中的iOS5稳定应用程序崩溃【英文标题】:iOS5 Stable App Crashing in iOS4.3 Simulator 【发布时间】:2012-01-26 14:17:42 【问题描述】:

我收到一个 NSInvalidArgumentException 原因:-[UITapGestureRecognizer initWithCoder:]: unrecognized selector sent to instance

我的理解是 ios4.x 支持 UITapGestureRecognizers?

是否可以为 sub ios5 版本加载不同的 xib 文件?

【问题讨论】:

它们在 4.x 中受支持,问题是你不能只将它们放在 xib 中(我想这里就是这种情况)。您不能在代码中设置它或制作另一个 xib 并在版本检查后加载它。 查看this potentially related question。您可能需要以不同的方式实例化您的 UITapGestureRecognizers。 在我看来,您的识别器正在被释放...... UIGestureRecognizer 没有响应 -initWithCoder: 这就是它崩溃的原因。 (我认为指向 UIGestureRecognoizer 对象的解除分配指针正在被另一个对象接管,该对象应该响应 initWithCoder:...) 【参考方案1】:

正如@mit3z 在他对原始问题的评论中所说,iOS 4.3 仅在使用代码手动设置时才支持此功能。 Interface Builder 不支持它。

如果 Apple 只是将其添加为构建时警告,那么他们就不会为此感到悲伤。

【讨论】:

这解决了我的问题。如需通过代码快速添加 GestureRecognizer,请在此处查看答案:***.com/questions/5954934/…【参考方案2】:

我认为你有一个 NSCoding 兼容的对象在崩溃前被释放。 UITapGestureRecognizer 在其地址分配,当消失的对象(但不是其引用)尝试对其自身调用 initWithCoder 时,它实际上会在您的gestureRecognizer 上调用此方法。

那么你的问题来自那个被释放的对象,而不是你的gestureRecognizer。

确保保留所有 IBOutlet 属性。

【讨论】:

你不能同时使用 ARC 和调用 retain。如果调用保留编译,你没有使用 ARC。 我认为他的意思是他正在输入 strongretain 输入他的 IBOutlet 属性,而不是实际调用对象本身的保留。如果他真的用 arc 调用retain,代码将无法编译。

以上是关于iOS4.3模拟器中的iOS5稳定应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

iOS 5 中的弹出框变化?

放大 ScrollView 在 iOS 4 中有效,但在 iOS 5 和 iOS5.1 中崩溃

程序在 iOS 5 中崩溃而在 iOS 4 中正常?

ios 4.3 应用程序与 ios 5.0 的兼容性

iOS 4.3 上传视频时崩溃

ios4+的UITabBar自动旋转