iOS и разархивирование xib-файлов - PullRequest
5 голосов
/ 15 января 2012

Я заканчиваю приложение для iOS 3.0 и выше, чтобы запускать его на iPhone и iPod Touch. Он отлично работает на iOS4.0 и выше, но когда я тестирую его на iPod Touch второго поколения под управлением iOS 3.0, появляется стартовое изображение, и я встречаюсь со следующим:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSKeyedUnarchiver initForReadingWithData:]: incomprehensible archive (0x4e, 0x49, 0x42, 0x41, 0x72, 0x63, 0x68, 0x69)'
2012-01-15 09:35:53.025 MyApp[3026:207] Stack: (
    808001701,
    805397928,
    807551015,
    807550919,
    810902709,
    815043196,
    815042704,
    814682908,
    814682012,
    814970032,
    814968048,
    814966908,
    839149932,
    807750263,
    807747947,
    814678868,
    814672532,
    61527,
    10764
)
terminate called after throwing an instance of 'NSException'
(gdb) backtrace
#0  0x31dd594c in __kill ()
#1  0x31dd5940 in kill ()
#2  0x31dd5934 in raise ()
#3  0x31deccfe in abort ()
#4  0x374ef848 in __gnu_cxx::__verbose_terminate_handler ()
#5  0x300166c0 in _objc_terminate ()
#6  0x374ecf3c in __cxxabiv1::__terminate ()
#7  0x374ecfb4 in std::terminate ()
#8  0x374ed0dc in __cxa_throw ()
#9  0x300165e4 in objc_exception_throw ()
#10 0x30224026 in +[NSException raise:format:arguments:] ()
#11 0x30223fc6 in +[NSException raise:format:] ()
#12 0x305564b4 in -[NSKeyedUnarchiver initForReadingWithData:] ()
#13 0x3094927c in -[UINib instantiateWithOptions:owner:loadingResourcesFromBundle:] ()
#14 0x30949090 in -[NSBundle(NSBundleAdditions) loadNibNamed:owner:options:] ()
#15 0x308f131c in -[UIApplication _loadMainNibFile] ()
#16 0x308f0f9c in -[UIApplication _runWithURL:sourceBundleID:] ()
#17 0x309374b0 in -[UIApplication handleEvent:withNewEvent:] ()
#18 0x30936cf0 in -[UIApplication sendEvent:] ()
#19 0x3093687c in _UIApplicationHandleEvent ()
#20 0x3204696c in PurpleEventCallback ()
#21 0x30254a76 in CFRunLoopRunSpecific ()
#22 0x3025416a in CFRunLoopRunInMode ()
#23 0x308f0354 in -[UIApplication _run] ()
#24 0x308eea94 in UIApplicationMain ()
#25 0x0000f056 in main (argc=1, argv=0x2ffff7c8) at ...... Classes/main.m:16
Current language:  auto; currently objective-c

Есть идеи, что это такое и как это исправить?

Я строю в Xcode 4.2.1.

PS - Проблема не решается путем очистки сборки или сохранения файлов .xib. Иногда приложение проходит этот этап, но происходит сбой по той же причине, когда оно видит более позднюю версию .xib, например, при загрузке контроллера представления.

1 Ответ

2 голосов
/ 15 января 2012

Я полагаю, что этот ответ охватывает то, что мог бы дать Икурагамес (он не возле своего компьютера). От его имени, чтобы решить проблему в Xcode 4.2.1, нажмите на файл .xib и на панели свойств файла справа установите развертывание на «iOS 3.0» (в моем случае) и разработку на «Интерфейсный конструктор». 3.0 "(опять в моем случае). Сделайте это для каждого файла .xib в проекте.

Стоит помнить, что Xcode 4.2.1 вполне может установить значения по умолчанию "iOS 5.0" для развертывания здесь, чтобы соответствовать текущему SDK, и "Xcode 4.1" для типа документа. Почему XCode не просто сопоставляет цель развертывания с целью развертывания проекта, я не уверен ...

Если это все еще не работает или вы очень параноидальны на этом этапе, поймайте исключение, вызванное NSKeyedUnarchiver при загрузке .xib файла, и там создайте представление программно.

enter image description here

...