Получение NSInternalInconsistencyException в локали по умолчанию при выполнении i18n - PullRequest
0 голосов
/ 21 марта 2012

У меня «странная» проблема с NSInternalInconsistencyException и i18n. Зная, что это исключение встречается довольно часто, я потратил несколько часов на поиски, применяя найденные решения и пытаясь понять, что происходит, но без удачи, поэтому я пишу здесь.

Общая картина - у меня есть устаревший (новый для меня) код довольно большого приложения, написанного для одной компании (распространяемого на нашем сервере, без AppStore), который ранее был только на английском языке, а теперь i18n'ed (добавление французского языка) язык).

Давайте рассмотрим три способа запуска приложения (симулятор, через кабель, через сборку ipa и загрузку его на сервер)

  1. Приложение работает нормально на симуляторе iPhone (для обеих локалей).
  2. При развертывании его на устройстве через кабель (на «чистом устройстве», без предустановленного приложения) отображается предупреждение:

    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% нормально на французском языке и иногда (случайным образом) вылетает сразу после запуска на английском (или вообще не французском) языке. Нет шаблона, когда это будет работать, а когда нет.

  1. При создании файла .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 и как это исправить, пожалуйста?

...