我正在尝试对我的应用程序进行重大升级。升级是如此重要,我实际上从头开始编写代码,新版本中没有包含原始代码库。我只是从旧版本复制了* -Info.plist,并更新了Bundle Version标识符。
当我尝试从较旧的(当前App Store)版本升级时遇到问题。当我通过XCode在设备上启动应用程序时,我收到消息:
启动可执行文件“应用程序名称”时出错 启动远程程序时出错:未能获得进程699的任务。
如果我在终止后再次尝试运行应用程序,我会在输出窗口中显示以下内容:
2011-10-21 15:40:27.996 Application Name[713:707] Unknown class Application_Name_NewAppDelegate in Interface Builder file.
2011-10-21 15:40:28.013 Application Name[713:707] Unknown class myTabBarController in Interface Builder file.
2011-10-21 15:40:28.019 Application Name[713:707] Unknown class SelectViewController in Interface Builder file.
2011-10-21 15:40:28.037 Application Name[713:707] Unknown class AddDateViewController in Interface Builder file.
2011-10-21 15:40:28.047 Application Name[713:707] Unknown class DisplayViewController in Interface Builder file.
2011-10-21 15:40:28.063 Application Name[713:707] Unknown class AboutViewController in Interface Builder file.
2011-10-21 15:40:28.125 Application Name[713:707] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UICustomObject 0x16cae0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key window.'
*** First throw call stack:
(0x3200c8bf 0x31d7c1e5 0x3200c5f5 0x35ba1333 0x35ba0e33 0x35b7af19 0x31f6b803 0x31f6c491 0x32d384bf 0x32d39bb9 0x32c72a45 0x32afc227 0x32af6313 0x32ac4921 0x32ac43bf 0x32ac3d2d 0x3206fe13 0x31fe0553 0x31fe04f5 0x31fdf343 0x31f624dd 0x31f623a5 0x32af5457 0x32af2743 0x21b9 0x2178)
这些类实际上是当前版本的一部分,并且在我尝试升级到的新版本中根本不包含这些类。因此,在我看来升级因某种未知原因而失败。
有没有人对此有所了解?
答案 0 :(得分:6)
这听起来像是一个NIB缓存问题(错误结束“......在Interface Builder文件中”)。当我重命名NIB时,我已经看到了类似的问题,而不是在代码中的某个地方纠正它,但后来惊讶地看到错误的名称仍然有效,因为它会出现NIB缓存。不是直接并行,但它说明了应用程序数据被缓存超出代码的当前构建,并且在您的错误的情况下,它指的是接口构建器,因此可能是感兴趣的NIB缓存。 / p>
通常,执行“干净构建”可以解决此问题,但如果您已经从头开始完全没有任何遗留构建文件夹内容,那么这似乎不是问题。因此,一种可能性是尝试自己手动清除NSCachesDirectory并查看是否可以解决问题。 (任何人都可以确认NIB缓存存储在NSCachesDirectory中吗?)
其次,似乎从Xcode构建的过程可能无法直接镜像真正的AppStore升级,因为在实际的AppStore升级中,除了用户数据目录之外,整个应用程序都被删除,因此应删除任何缓存的数据。 One answer on this question提出了一个有趣的想法,即构建应用程序然后通过iTunes安装可能会更接近真实的升级过程,从而告诉您问题是否存在于真正的升级中而不是从Xcode构建。值得研究,因为所有报告都是在更新时清除NIB缓存。
答案 1 :(得分:0)
假设您正在使用XCode 4,请在Project Navigator中选择您的项目,然后选择您的目标。选择Build Phases,并验证:
所有笔尖都列在“复制捆绑资源”下。
所有'.m'文件都列在'编译源'下。
(如果您使用的是Xcode 3,您可以在“目标”下的Project Navigator中找到它们。)
有时,由于某些奇怪的原因,nib文件不会被置于构建阶段。
如果这不能解决问题,请在Interface Builder中,对于有问题的每个笔尖,单击文件所有者,选择标识检查器,然后检查该类是否设置为相应的笔尖。