iphone - iOS 应用程序在升级时崩溃

标签 iphone xcode ios

<分区>

如果我运行全新构建和全新安装,我的应用程序安装和运行都很好,但是,如果我安装以前发布的版本,然后用新版本覆盖该版本,它会在第一次运行时崩溃。

重现步骤

  1. 在 iPhone 4 上安装并运行我的应用程序的旧版本 (1.4)。
  2. 关闭应用并终止进程。
  3. 检查最新版本 (2.0)
  4. 删除构建目录
  5. 安装并运行
  6. 崩溃

我正在运行 Xcode 3.2.5,即 4.2 SDK。我的 iPhone 4 是 4.2.1。

如果您查看崩溃日志,看起来我的一个 NIB 中的连接有问题,但是没有对象试图连接到我的 AppController 中的“view”属性>。有时会发生相同的崩溃,只是它会说此类对于键 activityIndi​​cator 不符合键值编码。这也很奇怪,因为 grep 已确认我在名为 activityIndi​​cator 的项目中没有任何内容。

我有三个问题:

  • 为什么我的应用程序崩溃了?
  • 有人对我可以做的进一步调试有任何想法吗?我想不出如何解决这个问题。
  • 有可能(很可能?)当 Xcode 在您的设备上安装构建时,它会使用从商店安装应用程序时不会使用的快捷方式。有谁知道是否是这种情况,如果是这样,您是否知道一种模拟确切的应用商店安装过程的方法,这样我就可以确保我不会为所有升级者终止我的应用程序?

崩溃日志

2011-02-10 06:58:32.115 TheApp[132:307] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<AppController 0x14d680> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key view.'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x33ac0987 __exceptionPreprocess + 114
    1   libobjc.A.dylib                     0x3347b49d objc_exception_throw + 24
    2   CoreFoundation                      0x33ac0705 -[NSException dealloc] + 0
    3   Foundation                          0x3367db4f -[NSObject(NSKeyValueCoding) setValue:forUndefinedKey:] + 182
    4   Foundation                          0x3367d03b _NSSetUsingKeyValueSetter + 90
    5   Foundation                          0x3367eda3 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 194
    6   Foundation                          0x33630b17 -[NSObject(NSKeyValueCoding) setValue:forKeyPath:] + 130
    7   UIKit                               0x3224c60f -[UIRuntimeOutletConnection connect] + 66
    8   CoreFoundation                      0x33a63fc7 -[NSObject(NSObject) performSelector:] + 18
    9   CoreFoundation                      0x33a6cd51 -[NSArray makeObjectsPerformSelector:] + 388
    10  UIKit                               0x3224b577 -[UINib instantiateWithOwner:options:] + 586
    11  UIKit                               0x3224cb39 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 92
    12  UIKit                               0x3209e871 -[UIApplication _loadMainNibFile] + 96
    13  UIKit                               0x3209a1fd -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 180
    14  UIKit                               0x3206648b -[UIApplication handleEvent:withNewEvent:] + 1114
    15  UIKit                               0x32065ec9 -[UIApplication sendEvent:] + 44
    16  UIKit                               0x32065907 _UIApplicationHandleEvent + 5090
    17  GraphicsServices                    0x33b0ef03 PurpleEventCallback + 666
    18  CoreFoundation                      0x33a556ff __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 26
    19  CoreFoundation                      0x33a556c3 __CFRunLoopDoSource1 + 166
    20  CoreFoundation                      0x33a47f7d __CFRunLoopRun + 520
    21  CoreFoundation                      0x33a47c87 CFRunLoopRunSpecific + 230
    22  CoreFoundation                      0x33a47b8f CFRunLoopRunInMode + 58
    23  UIKit                               0x32099309 -[UIApplication _run] + 380
    24  UIKit                               0x32096e93 UIApplicationMain + 670
    25  TheApp                              0x00002781 main + 88
    26  TheApp                              0x00002724 start + 40
)

--

我应该补充一点,应用程序在它到达我的任何代码之前崩溃,即永远不会调用 application:didFinishLaunchingWithOptions:applicationDidFinishLaunching:

最佳答案

终于弄清楚了问题所在。我的应用程序的先前版本未本地化,因此所有 NIB 都位于应用程序包的顶层。我的应用程序的最新版本本地化的,因此所有 NIB 都在 en.lproj 目录中。当 Xcode 将应用程序部署到设备(和模拟器)时,它不会替换整个包,它只是将构建文件复制到现有包中。这导致我的 NIB 有两个版本,一个是我的应用程序包顶层的过时版本,另一个是子文件夹中的当前版本。

设置应用程序时,它会拉取最上面的 NIB,这是不正确的 NIB,会导致崩溃。因此,我需要实际将 .ipa 部署到我的手机上以测试升级。

关于iphone - iOS 应用程序在升级时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4957253/

相关文章:

iphone - 如何在 iPhone 应用程序中播放歌曲时显示剩余时间?

iphone - 在 MapView 上点击注释时隐藏弹出窗口

ios - WKWebview allowsBackForwardNavigationGestures 和 UINavigationController interactivePopGestureRecognizer 都启用

ios - Xcode - UITextField 为空

ios - 检测在 UITableView 中按下了哪个 UIButton

iphone - 可以从主包中删除文件吗?

ios - 如何在 iOS 的 cocoapod 库中使用图像 Assets 目录

iphone - 如何更改 UITableViewCellStyleValue2 单元格上标签的大小? (UITableView iPhone)

ios - 应用程序无法安装在 Apple Watch 中

ios - iOS 上的 MobileVLCKit 问题(夜间构建)