gpt4 book ai didi

ios - 使用Xcode 4.3.x构建适用于iOS 3.0的通用应用程序-NSKeyedUnarchiver异常

转载 作者:可可西里 更新时间:2023-11-01 05:46:59 24 4
gpt4 key购买 nike

尝试使用Xcode 4.3.2为iOS 3.0构建和调试通用应用程序。我从NSKeyedUnarchiver得到一个NSException。似乎与无法读取主.xib文件有关。我已经看到了:iOS and unarchiving xib files-但是,在那种情况下,尚不清楚应用程序是否通用(其解决方案不起作用)(注意:他们的解决方案不起作用,因为他们使用的是Xcode 4.2,而不是4.3)。

错误输出:

2000-01-01 11:00:39.-19 myApp[664:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSKeyedUnarchiver initForReadingWithData:]: incomprehensible archive (0x4e, 0x49, 0x42, 0x41, 0x72, 0x63, 0x68, 0x69)'
2000-01-01 11:00:39.-01 myApp[664:207] Stack: (
808001701,
805397928,
807551015,
807550919,
810902709,
815043196,
815042704,
814682908,
814682012,
814970032,
814968048,
814966908,
839149932,
807750263,
807747947,
814678868,
814672532,
12253,
12124
)
terminate called after throwing an instance of 'NSException'
Not safe to look up objc runtime data.

最佳答案

只是以为我会与我分享这个NSKeyedUnarchiver难以理解的存档xib错误的解决方案。

我刚刚花了几周的时间来解决这个问题,而我的解决方法与上面的borrrden几乎相同(即,使用由旧版Xcode构建的nib文件)。我尝试了所有其他我想不到的事情,没有任何喜悦。 (我的其他选择是停止使用xib文件并用代码编写整个UI或停止支持iOS 3.0)

因此,这是我的处境,如何找到可行的解决方法,以及如何为应用商店建立发行档案。

首先需要一点背景:我的应用程序最初是使用Xcode 3.2.5构建的,并且在iOS 3.0及更高版本上运行良好。当我升级到Xcode 4.2时,应用程序加载了xib文件后,我收到了NSKeyedUnarchiver错误。经过一段时间的Google搜索之后,我遇到了该线程中提到的其他文章,因此我更改了每个xib文件的Deployment and Development版本。这样做很有效,直到错误返回时我升级到Xcode 4.3.1。我重新检查了所有xib文件,但没有任何乐趣。即使将它们设置为iOS3.0 / IB3.0(并且我尝试了所有可用的组合),该应用仍然崩溃。

为了证明这是xib文件存在的问题,我尝试在设备上进行调试(运行iOS 3.0的第二代iPod Touch,通过电缆连接到Xcode)。但是,应用程序可能会在调试器开始运行之前崩溃。因此,我从项目中删除了MainWindow.xib(在代码中设置了App Delegate和UIWindow)。这使调试器可以启动并击中我的第一个断点(应用程序的第一行:didFinishLaunchingWithOptions),但是只要我按下ViewController,应用程序就会挂起而不会引发异常。经过大量挖掘之后,我将调试器从LLDB切换到GDB(从“产品”->“编辑方案”)。这停止了​​应用程序的挂起,并按我的预期抛出了异常(令人难以理解的存档之一)。 LLDB显然仍然存在问题。

经过两周的努力,唯一可行的方法是使用由旧版本Xcode构建的nib文件。幸运的是,我的机器上还有Xcode 3.2.5。这是我用来完成此工作并允许为应用商店建立存档的步骤:

  • 退出Xcode 4.3.1并启动Xcode 3.2.5。
  • 创建一个新的“基于视图的应用程序”项目,并将主项目中的所有.xib文件添加到其中。
  • 将部署目标设置为iOS3.0,然后在设备上进行发布构建和运行(如果您不自动选择通用配置文件,请使用您的通用配置文件)
  • 从Xcode,在finder中显示.app,然后显示包内容以查看其中的所有.nib文件(Xcode已将.xib文件转换为.nib文件)。
  • 为了便于使用,请将.nib文件复制到另一个目录。
  • 退出Xcode 3.2.5并启动Xcode 4.3.1并打开您的项目。
  • 访问每个xib,然后从右侧的侧栏中从目标成员资格中取消选择您的应用程序(这意味着Xcode将而不是使用这些.xib文件作为最终软件包)。
  • 现在,将所有新的.nib文件(由Xcode 3.2.5生成)添加到您的项目中(为简洁起见,将它们放入自己的组中)。
  • 现在,您可以随意清理,构建和运行,甚至可以为应用商店构建存档。

  • 若要证明使用了正确的.nib文件,请在终端上使用md5。在Finder中显示您的.app(或来自Organiser的存档)以查看Xcode的创建位置,然后显示包内容以查看.nib文件。将md5校验和与Xcode 3.2.5创建的.nib文件中的校验和进行比较。

    只要记住,每次修改Xib时,它都不会被使用,直到从Xcode 3.2.5构建为止。并将生成的.nib文件复制到您的保存目录中。

    这不是理想的,如果有人有更好的解决方案可以工作,我很想听听。同时,我希望这会有所帮助。

    关于ios - 使用Xcode 4.3.x构建适用于iOS 3.0的通用应用程序-NSKeyedUnarchiver异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9961631/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com