如果我运行一个干净的版本和全新安装,我的应用程序安装并运行得很好,但是,如果我安装以前发布的版本,然后用新版本覆盖该版本,它将崩溃第一次运行。iOS应用程序崩溃升级
步骤来重现
- 安装并在iPhone上运行我的应用程序(1.4)的以前版本的4
- 关闭应用程序,并杀害的过程。
- 结帐最新版本(2.0)
- 删除构建目录
- 安装和运行
- 崩溃
我跑的Xcode 3.2.5,4.2 SDK。我的iPhone 4是4.2.1。
如果你看看崩溃日志,看起来好像我的NIB中有一个坏连接,但没有任何对象试图连接到我的AppController
中的'view'属性。有时会发生相同的崩溃,除非它会说此类不是密钥值编码兼容的关键活动指示符。这也是不可靠的,因为grep已经证实我的项目中没有任何东西叫做activityIndicator。
我有三个问题:
- 为什么我的应用程序崩溃?
- 有没有人有任何想法,我可以做进一步的调试?我已经用尽了解如何解决这个问题的想法。
- 当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:
永远不会被调用。
线索是:“该类不是关键值编码 - 关键活动指示符”这意味着该笔尖告诉框架在AppController上存在(或者是)activityIndicator IBOutlet。你可能已经在XCode中删除它,但从未更新过你的笔尖。打开你的笔尖,并像在InterfaceBuilder中定义的那样检查AppController的属性。 – Cliff 2011-02-10 14:54:45
这不是问题,Cliff。该应用程序在干净的安装中加载和运行完美。 – kubi 2011-02-10 14:58:53
我假设当你从AppStore更新应用程序包被完全删除和替换的应用程序,这将解决这个问题。不过,我不想提交我的二进制文件,直到我确信。 – kubi 2011-02-10 15:01:42