У меня «странная» проблема с NSInternalInconsistencyException и i18n. Зная, что это исключение встречается довольно часто, я потратил несколько часов на поиски, применяя найденные решения и пытаясь понять, что происходит, но без удачи, поэтому я пишу здесь.
Общая картина - у меня есть устаревший (новый для меня) код довольно большого приложения, написанного для одной компании (распространяемого на нашем сервере, без AppStore), который ранее был только на английском языке, а теперь i18n'ed (добавление французского языка) язык).
Давайте рассмотрим три способа запуска приложения (симулятор, через кабель, через сборку ipa и загрузку его на сервер)
- Приложение работает нормально на симуляторе iPhone (для обеих локалей).
При развертывании его на устройстве через кабель (на «чистом устройстве», без предустановленного приложения) отображается предупреждение:
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% нормально на французском языке и иногда (случайным образом) вылетает сразу после запуска на английском (или вообще не французском) языке. Нет шаблона, когда это будет работать, а когда нет.
- При создании файла .ipa и его загрузке с сервера (как это делалось тысячу раз до начала работы на i18n), снова он работает на французском и не работает на не французском (в этом случае он никогда не работает на не французском). французский язык, всегда вылетает).
После просмотра логов устройства (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 name.
Я пробовал много вещей, упомянутых в других темах об NSInternalInconsistencyException, таких как:
- очистка, восстановление, удаление и т. д. сто раз
- проверено на разных iOS (4.x, 5.1), разных устройствах (iPhone 3gs, iPhone 4), разных версиях Xcode (4.3 и 4.3.1)
- трижды проверяется на наличие буквенных случаев
- тройная проверка, если XIB-файлы уже существуют на жестком диске и в списке XCode
- проверил фазы сборки (если все выходы xib есть)
- даже вручную проверено (в текстовых файлах из распакованного .xcodeproj) на странные вещи
- (восстанавливается до предыдущей версии после каждого из вышеперечисленных, чтобы не создавать новых проблем)
Пожалуйста, дайте мне любую идею, где еще может быть проблема.
Спасибо
Peter
приписка
Еще один совет - после распаковки .ipa файла я увидел, что в папке fr.lproj у меня есть файлы nib и xib, а на en.lproj есть только файлы xib. Это может привести к выводу, что решение будет простым, но может кто-нибудь объяснить, почему перья не генерируются только для папки en.lpfoj и как это исправить, пожалуйста?