我对NSInternalInconsistencyException和i18n有一个'奇怪'的问题。知道这个例外是相当普遍的,我花了几个小时谷歌搜索,应用找到的解决方案并试图弄清楚发生了什么,但没有运气,所以我写在这里。
大图 - 我有一个遗留代码(对我来说很新)为一家公司编写的相当大的应用程序(分布在我们的服务器上,没有涉及AppStore)以前只有英文版,现在正在i18n'ed(添加法语)式语言)。
让我们考虑三种方式来运行应用程序(模拟器,通过电缆,通过构建ipa并将其上传到服务器上)
当通过电缆将其部署到设备上时(在“干净设备上”,未预先安装此应用程序),它会显示警告:
error: failed to launch '/Users/usernameHere/Library/Developer/Xcode/DerivedData/AppNameHere-fkwiiumosdepixgosenacslljqib/Build/Products/Debug-iphoneos/appName.app/appName' -- failed to send the qLaunchSuccess packet
但从那时起(重新启动应用程序后)它在法语区域设置上100%正常工作,有时(随机)在英语(或一般非法语)语言环境启动后崩溃。没有模式什么时候会起作用,什么时候不起作用。
查看设备日志(Xcode - > Organizer)后,会出现类似的情况:
Mar 21 11:46:21 unknown appName[2943] <Error>: *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </var/mobile/Applications/A713C13E-0C8C-4595-9D24-E15C8494EA3D/appName.app> (loaded)' with name 'MultiSearchHelp''
*** Call stack at first throw:
(
0 CoreFoundation 0x339d764f __exceptionPreprocess + 114
1 libobjc.A.dylib 0x34c5ac5d objc_exception_throw + 24
2 CoreFoundation 0x339d7491 +[NSException raise:format:arguments:] + 68
3 CoreFoundation 0x339d74cb +[NSException raise:format:] + 34
4 UIKit 0x35beda53 -[UINib instantiateWithOwner:options:] + 1110
5 UIKit 0x35beee09 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 92
6 appName 0x00057d69 -[MultiSearchController initWithNibName:bundle:] + 396
7 appName 0x00003adb -[AppNameAppDelegate continueApplicationStartAfterSplash:] + 526
8 Foundation 0x32a9f183 _nsnote_callback + 142
9 CoreFoundation 0x339a620f __CFXNotificationPost_old + 402
10 CoreFoundation 0x33940eeb _CFXNotificationPostNotification + 118
11 Foundation 0x32a9c5d3 -[NSNotificationCenter postNotificationName:object:userInfo:] + 70
12 Foundation 0x32a9e1c1 -[NSNotificationCenter postNotificationName:object:] + 24
13 appName 0x0000503f __block_global_0 + 50
14 libdispatch.dylib 0x362128e7 _dispatch_call_block_and_release + 10
15 libdispatch.dylib 0x3620e205 _dispatch_main_queue_callback_4CF$VARIANT$up + 312
16 CoreFoundation 0x339b193b __CFRunLoopRun + 1334
17 CoreFoundation 0x33941ec3 CFRunLoopRunSpecific + 230
18 CoreFoundation 0x33941dcb CFRunLoopRunInMode + 58
19 GraphicsServices 0x3354241f GSEventRunModal + 114
20 GraphicsServices 0x335424cb GSEventRun + 62
21 UIKit 0x35a12d69 -[UIApplication _run] + 404
22 UIKit 0x35a10807 UIApplicationMain + 670
23 appName 0x00002d01 main + 60
24 appName 0x00002cc0 start + 40
)
我的第一个猜测是MultiSearchHelp.xib出了问题,但是在完全从代码中删除它之后(并检查法语版本它是否正常工作,多次清理)我得到了几乎相同的错误评论,但是有不同的xib名称。
我已经尝试了很多关于NSInternalInconsistencyException的其他主题中提到的事情,例如: - 清洁,重建,卸载等数百次 - 检查不同的iOS(4.x,5.1),不同的设备(iPhone 3gs,iPhone 4),不同的Xcode版本(4.3和4.3.1) - 三重检查信件案件问题 - 三重检查xib文件是否已经退出硬盘和Xcode列表 - 检查构建阶段(如果所有xib退出那里) - 甚至手动审查(在unpacked .xcodeproj中的textedit文件中)以查找奇怪的事情 - (在上述各项之后恢复到之前的版本不会产生新问题)
请让我知道问题还有哪些方面。
谢谢,
彼得
P.S。
还有一个提示 - 在解压缩.ipa文件后,我看到,在fr.lproj文件夹中我有nib和xib文件,而在en.lproj上只有xib。这可能会导致解决方案很容易的结论,但是有人可以解释一下为什么nib不是仅为en.lpfoj文件夹生成的,以及如何解决它,请?