【问题标题】:Loading main XIB makes app crash on iOS 3.0加载主 XIB 会使应用程序在 iOS 3.0 上崩溃
【发布时间】:2012-03-22 15:45:43
【问题描述】:

感谢您花时间阅读我的问题。 我有这个应用程序(在 Cydia 中),它有大约 10% 的用户使用 iOS 3.0,所以我想在下一次更新中支持他们。

我在实际运行的设备(iOS 4.0 和 5.0.1)上对其进行了测试;它工作得很好。但是在 iOS 3.0 上它会崩溃并出现异常:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: ' -[NSKeyedUnarchiver initForReadingWithData:]: incomprehensible archive (0x4e, 0x49, 0x42, 0x41, 0x72, 0x63, 0x68, 0x69)

显然在加载主 XIB 时,这里是异常的回溯:

0  0x30016588 in objc_exception_throw ()
1  0x30224026 in +[NSException raise:format:arguments:] ()
2  0x30223fc6 in +[NSException raise:format:] ()
3  0x305564b4 in -[NSKeyedUnarchiver initForReadingWithData:] ()
4  0x3094927c in -[UINib instantiateWithOptions:owner:loadingResourcesFromBundle:] ()
5  0x30949090 in -[NSBundle(NSBundleAdditions) loadNibNamed:owner:options:] ()
6  0x308f131c in -[UIApplication _loadMainNibFile] ()
7  0x308f0f9c in -[UIApplication _runWithURL:sourceBundleID:] ()
8  0x309374b0 in -[UIApplication handleEvent:withNewEvent:] ()
9  0x30936cf0 in -[UIApplication sendEvent:] ()
10 0x3093687c in _UIApplicationHandleEvent ()
11 0x3204696c in PurpleEventCallback ()
12 0x30254a76 in CFRunLoopRunSpecific ()
13 0x3025416a in CFRunLoopRunInMode ()
14 0x308f0354 in -[UIApplication _run] ()
15 0x308eea94 in UIApplicationMain ()
16 0x00003886 in main (argc=1, argv=0x2ffff74c)

我已阅读并尝试过 thisthis。因此,我将所有 nib 的部署版本设置为 3.0,并将开发版本设置为 Interface Builder 3.0,但仍然没有运气。

【问题讨论】:

  • 你有旧的 XCode SDK 吗?您是否尝试过从此类 sdk 中使用 InterfaceBuilder 打开笔尖?
  • 谢谢@Peter,我认为有一些进展,我听从了你的建议,幸运的是我可以访问 Xcode 3.2,我在那里编译了我的项目,经过一些修复,它可以在 iOS 设备上运行3.0,然后我将完全相同的项目复制到Xcode 4.2,我得到了与之前相同的错误,我猜这是新Xcode编译项目的方式。
  • 我不是 100% 确定,但我想我在某处读到 xcode 4.2 笔尖只能向后兼容到 iOS 3.2。我会尝试将所需的最低目标设置为 3.2 - 或者尝试使用使用旧 sdk 创建的 nib,而不在 XCode 4.2 中重新编译它们。
  • 你是对的@Peter!根据苹果文档:“iOS 3.2 支持加载未剥离的 nib 文件,但 3.2 之前的 iOS 版本不支持。如果您选择构建未剥离的 nib 文件以支持本地化工作流程,您应该使用 ibtool 的 --strip 命令剥离 nib 文件本地化后,或暂时恢复“Flatten Compiled XIB Files”和“Strip NIB Files”构建设置以构建与以前的iOS版本兼容的nib文件。”我尝试使用该配置。设置,但仍然不会加载NIB。所以我做了一个有点老套的解决方案,但似乎有效:

标签: ios exception xcode4.2 xib ios-3.x


【解决方案1】:

阅读了一些文档后,很明显 iOS 3.2 之前的版本不会从 Xcode 4.2 加载 NIB,所以我最终使用 Xcode 3.2 构建项目并将这些 NIB 复制到使用 Xcode 4.2 创建的包中的 DerivedData 目录下,好的部分是我仍然可以使用 Xcode 4.2 调试应用程序,不好的部分是,这有点 hacky,但我别无选择。谢谢。

【讨论】:

    【解决方案2】:

    我赞同伊曼纽尔的上述回答。在拔掉头发数周后,我想出了这个解决方案: Build universal app for iOS 3.0 using Xcode 4.3.x - NSKeyedUnarchiver Exception

    【讨论】:

      猜你喜欢
      • 2012-01-15
      • 1970-01-01
      • 2018-01-09
      • 2015-12-29
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      相关资源
      最近更新 更多