【问题标题】:XCode 4 causing iOS4 app top crash, where XCode 3 didn'tXCode 4 导致 iOS4 应用程序顶部崩溃,而 XCode 3 没有
【发布时间】:2011-08-29 00:18:15
【问题描述】:

为我的公司开发一款 iPhone 应用。最近升级到 XCode 4(但在单独的文件夹中保留了 XCode 3 的安装)。

应用程序,如果在 XCode 3 下编译和运行,运行稳定且不会崩溃。 如果在 XCode 4 下编译和运行,它将运行,打开一个关于屏幕,并允许我通过标签栏导航到其他页面之一(一个笔记页面)。但是如果我点击另一个选项卡(一个只包含 MKMapView 的页面),它每次都会崩溃。

我的 iPod Touch 是个例外,运行 iOS 5。它运行良好,所以问题似乎是 iOS4 上的 XCode 4(我目前正在测试 4.3.5)。

崩溃日志在这里:http://pastebin.com/p0sXqbSZ

【问题讨论】:

  • 日志看起来很清楚。 “无法识别的选择器发送到实例”。为什么您认为存在更大的问题?
  • 因为没有代码改变。除了我使用的 XCode 版本之外,没有任何变化。所有 iOS4 设备在 XCode 3 下都可以正常运行此项目。如何在具有相同操作系统的同一设备上运行的相同选择器在一个版本的 XCode 中编译时有效,但在另一个版本中无效?
  • 好吧,我在 Xcode 4 中遇到了一些奇怪的问题,这些问题通过先清理解决了。无论如何 UIImage 不符合 NSCoding 标准。还有错误。所以你至少可以发布最终抛出这个的代码。

标签: iphone ios5 xcode4 ios4 xcode3.2


【解决方案1】:

如果您使用的是 Xcode 4.2 和 iOS 5 SDK beta 5 或更高版本,那么您可能会遇到 SDK 中的错误。请参阅this question 接受的答案。

有一些解决方法。这是最简单的一个,首先由 Kreuters 提出:

@implementation UIImage (initWithCoder)

- (id)initWithCoder:(NSCoder *)aDecoder
{
     return nil;
}

@end

如果您可以在 Xcode 4.2 和 iOS 5 SDK beta 7 中重现该错误,您应该file a bug report

【讨论】:

  • 干杯艾略特。不是一个完整的修复,而是一种解决方法,至少我知道它是 Apple 的,而不是我的。
【解决方案2】:

从崩溃日志看来,UIImage 初始化会导致崩溃。如果您有任何[UIImage initWithCoder:] 代码,请尝试对其进行评论并查看是否有效。如果这确实是问题所在,请检查该图像是否仍添加到您的项目中,和/或重新导入该图像。

【讨论】:

  • 我绝不会使用 initWithCoder 对图像进行编码/解码。
【解决方案3】:

您是否尝试过“编辑器”下的“现代化项目”?

除此之外,问题似乎在于苹果存储来自 xib 文件的信息的方式,因为在加载 UIViewController 时会调用 [UIImage initWithCoder:]

7   UIKit  0x31f98df3 -[UIImageView initWithCoder:] + 66
...
20  UIKit  0x3203b489 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 92
21  UIKit  0x31f90cbd -[UIViewController _loadViewFromNibNamed:bundle:] + 36

我不知道这是否有帮助,但请尝试查看创建/检索 xib 的方式发生了哪些变化,也许是与您所做的某些事情发生冲突的新功能。或者检查您正在检索的任何图像。

【讨论】:

  • “现代化项目”对我来说没有出现在编辑器菜单中。问题列表中也没有需要现代化的问题。查看 .xib 文件,仅引用了 1 个图像。删除该图像后,问题仍然存在。
猜你喜欢
  • 2011-09-16
  • 2012-07-13
  • 2022-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-24
  • 2011-07-05
相关资源
最近更新 更多