【问题标题】:iOS and unarchiving xib filesiOS 和取消归档 xib 文件
【发布时间】:2012-02-10 17:34:27
【问题描述】:

我正在完成一个适用于 iOS 3.0 及更高版本的应用程序,以便在 iPhone 和 iPod Touch 上运行。它在 iOS4.0 及更高版本上运行良好,但是当我在运行 iOS 3.0 的第二代 iPod Touch 上对其进行回测时,启动图像显示并且我遇到了以下情况:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSKeyedUnarchiver initForReadingWithData:]: incomprehensible archive (0x4e, 0x49, 0x42, 0x41, 0x72, 0x63, 0x68, 0x69)'
2012-01-15 09:35:53.025 MyApp[3026:207] Stack: (
    808001701,
    805397928,
    807551015,
    807550919,
    810902709,
    815043196,
    815042704,
    814682908,
    814682012,
    814970032,
    814968048,
    814966908,
    839149932,
    807750263,
    807747947,
    814678868,
    814672532,
    61527,
    10764
)
terminate called after throwing an instance of 'NSException'
(gdb) backtrace
#0  0x31dd594c in __kill ()
#1  0x31dd5940 in kill ()
#2  0x31dd5934 in raise ()
#3  0x31deccfe in abort ()
#4  0x374ef848 in __gnu_cxx::__verbose_terminate_handler ()
#5  0x300166c0 in _objc_terminate ()
#6  0x374ecf3c in __cxxabiv1::__terminate ()
#7  0x374ecfb4 in std::terminate ()
#8  0x374ed0dc in __cxa_throw ()
#9  0x300165e4 in objc_exception_throw ()
#10 0x30224026 in +[NSException raise:format:arguments:] ()
#11 0x30223fc6 in +[NSException raise:format:] ()
#12 0x305564b4 in -[NSKeyedUnarchiver initForReadingWithData:] ()
#13 0x3094927c in -[UINib instantiateWithOptions:owner:loadingResourcesFromBundle:] ()
#14 0x30949090 in -[NSBundle(NSBundleAdditions) loadNibNamed:owner:options:] ()
#15 0x308f131c in -[UIApplication _loadMainNibFile] ()
#16 0x308f0f9c in -[UIApplication _runWithURL:sourceBundleID:] ()
#17 0x309374b0 in -[UIApplication handleEvent:withNewEvent:] ()
#18 0x30936cf0 in -[UIApplication sendEvent:] ()
#19 0x3093687c in _UIApplicationHandleEvent ()
#20 0x3204696c in PurpleEventCallback ()
#21 0x30254a76 in CFRunLoopRunSpecific ()
#22 0x3025416a in CFRunLoopRunInMode ()
#23 0x308f0354 in -[UIApplication _run] ()
#24 0x308eea94 in UIApplicationMain ()
#25 0x0000f056 in main (argc=1, argv=0x2ffff7c8) at ...... Classes/main.m:16
Current language:  auto; currently objective-c

任何想法这是什么以及如何解决它?

我在 Xcode 4.2.1 中构建。

PS - 通过清理构建或重新保存 .xib 文件无法解决问题。有时应用程序会通过这个阶段,但是当它看到更高版本的 .xib 时会因为显然相同的原因而崩溃,比如在加载视图控制器时。

【问题讨论】:

  • 正如您所说您已尝试清理构建并重新保存 nib 文件,我假设您也尝试过重置模拟器中的内容和设置?
  • 不,因为我正在尝试在设备上运行。该应用在模拟器(iOS 4.3 和 iOS 5.0 模拟器)中运行良好。
  • 你没有3.0模拟器?我建议你下载旧版本的 Xcode 并尝试在那里构建它,看看是否有帮助。
  • 您的 XIB 是否采用 Xcode 3.2 格式?
  • 我不能 100% 确定,因为我现在不在电脑旁,但我相信当您在文件视图 - 我不确定更改此设置是否会以旧格式重新保存现有的 Xib,或者是否需要重新创建它...我希望是前者。

标签: iphone ios ios4 ipod-touch ios-3.x


【解决方案1】:

我相信这个答案涵盖了 Ikuragames 可能给出的内容(他不在他的电脑附近)。代表他,要解决 Xcode 4.2.1 中的问题,请单击 .xib 文件并在右侧的文件属性面板中,将部署设置为“iOS 3.0”(在我的情况下)并将开发设置为“接口生成器” 3.0”(在我的情况下也是如此)。对项目中的每个 .xib 文件执行此操作。

值得记住的是,Xcode 4.2.1 可能会为此处的部署设置默认值“iOS 5.0”,以匹配当前的 SDK,并为文档类型设置“Xcode 4.1”。为什么 Xcode 不只是将部署目标与项目部署目标匹配我不确定...

如果这仍然不起作用,或者您在这个阶段非常偏执,请在加载 .xib 文件时捕获NSKeyedUnarchiver 引发的异常并以编程方式创建视图。

【讨论】:

  • @ikuragames:如果你不介意我可以在这里接受我自己的答案(即使它真的是你的!)。
  • 在 Xcode 4.2 (4C199) 上试过这个。为 iOS 3.0/Interface Builder 3.0 对项目中的每个 xib 进行了版本化。应用程序仍然在我的 iPod touch 上与 3.0 崩溃。“[NSKeyedUnarchiver initForReadingWithData:]: incomprehensible archive”。多次清理和删除应用程序。希望看到一个明确的解决方案,因为它使 xibs 对于针对旧 iOS 版本的应用程序几乎毫无用处。
  • 更新:就我而言,该应用程序是通用的(iPhone/iPad)。在 MainWindow-iPad.xib 中,选择了“启动时全屏”选项,但它引发了“属性不可用”警告,所以我取消选中它。那是我开始遇到难以理解的存档崩溃的时候。返回并启用该选项使应用程序再次运行,但我仍然对为什么 iPhone 版本正在加载 iPad xibs..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2017-07-21
  • 1970-01-01
  • 2010-11-19
  • 2022-08-21
  • 1970-01-01
相关资源
最近更新 更多