设置基础 SDK 后,iPhone 模拟器在 NSKeyedUnarchiver 中崩溃

Posted

技术标签:

【中文标题】设置基础 SDK 后,iPhone 模拟器在 NSKeyedUnarchiver 中崩溃【英文标题】:iPhone Simulator chrashes in NSKeyedUnarchiver after setting base SDK 【发布时间】:2010-01-28 15:04:57 【问题描述】:

我在 xcode(雪豹上的 3.2)中使用基础 sdk 3.1.2 开始了一个项目。现在我将此设置更改为 3.0,它编译时没有警告。在设备上运行应用程序没有问题,但模拟器每次启动时都会崩溃,但以下异常:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“[NSKeyedUnarchiver initForReadingWithData:]:无法理解的存档(0x4e、0x49、0x42、0x41、0x72、0x63、0x68、0x69)”

我不使用NSKeyedUnarchiver,那么为什么应用程序会尝试调用它?什么档案是不可理解的?我在构建之前重置了模拟器,所以周围没有 userDefaults 或其他任何东西。 感谢您的帮助!

【问题讨论】:

【参考方案1】:

我用这个详细的堆栈跟踪解决了这个问题:

#0  0x302ac924 in ___TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION___  
#1  0x904a3509 in objc_exception_throw  
#2  0x3028e5fb in +[NSException raise:format:arguments:]  
#3  0x3028e55a in +[NSException raise:format:]  
#4  0x30513b77 in -[NSKeyedUnarchiver initForReadingWithData:]  
#5  0x30ab4b2a in -[UINib instantiateWithOptions:owner:loadingResourcesFromBundle:]  
#6  0x30ab6eb3 in -[NSBundle(NSBundleAdditions) loadNibNamed:owner:options:]  
#7  0x308f85f1 in -[UIApplication _loadMainNibFile]  
#8  0x30901a15 in -[UIApplication _runWithURL:sourceBundleID:]  
#9  0x308fef33 in -[UIApplication handleEvent:withNewEvent:]  
#10 0x308fad82 in -[UIApplication sendEvent:]  
#11 0x309013e1 in _UIApplicationHandleEvent  
#12 0x32046375 in PurpleEventCallback  
#13 0x30245560 in CFRunLoopRunSpecific  
#14 0x30244628 in CFRunLoopRunInMode  
#15 0x308f930d in -[UIApplication _run]  
#16 0x309021ee in UIApplicationMain  
#17 0x0000255c in main at main.m:14  

应用程序在调用 mainNibFile 时崩溃。而且我不知道为什么,只是简单地重新保存 MainWindow.xib 解决了问题。

【讨论】:

【参考方案2】:

尝试从模拟器中完全卸载您的应用 - 它可能会在某处存储一些与设置有关的数据?

您是否有来自调试器的堆栈跟踪显示对 NSKeyedUnarchiver 的调用来自何处?

S

【讨论】:

重置模拟器或卸载应用程序无济于事。我错了:在 3.0 设备上发生同样的异常。但是在具有 3.1.2 的设备上使用相同的构建没有问题。堆栈跟踪:... #4 in -[NSKeyedUnarchiver initForReadingWithData:], #5 in -[UINib instantiateWithOptions:owner:loadingResourcesFromBundle:], #6 in -[NSBundle(NSBundleAdditions) loadNibNamed:owner:options:], #7在 -[UIApplication _loadMainNibFile], #8 在 -[UIApplication _runWithURL:sourceBundleID:] ...【参考方案3】:

之后我也遇到了同样的问题
    将我的 Xcode 项目发送到 FTP 远程服务器(使用 FileZilla) 重新下载 并启动它以检查文件是否顺利通过。重新下载的文件有这个问题。

我认为 ftp 会导致捆绑文件(例如 .xcodeproj)出现问题,因为有时 .pages 和 .numbers 文件也会出现问题。

我解决了这个问题

    压缩我的项目 (.zip) 在 ftp 上上传 .zip。 重新下载 解压 启动后就没有问题了!

【讨论】:

以上是关于设置基础 SDK 后,iPhone 模拟器在 NSKeyedUnarchiver 中崩溃的主要内容,如果未能解决你的问题,请参考以下文章

iPhone SDK:可以通过iPad设备访问Localhost吗? (调试时)

iPhone SDK UIScrollView 移动后没有触摸事件

NS-3学习ns-3模拟基础:目录结构,模块,仿真流程

iphone 应用最低要求 iOS

为啥 CLLocationManager 在模拟器中的 iphone SDK 4 beta 上返回空位置?

NS-3学习ns3-模拟基础:关键概念,日志,命令行参数