5 votes

IOS et désarchivage des fichiers xib

Je suis en train de finaliser une application pour iOS 3.0 et plus afin qu'elle fonctionne sur l'iPhone et l'iPod Touch. Tout fonctionne bien sur iOS 4.0 et plus, mais lorsque je teste sur un iPod Touch de deuxième génération fonctionnant sous iOS 3.0, l'image de lancement s'affiche et je suis confronté à ce qui suit :

*** Terminaison de l'application en raison d'une exception non capturée 'NSInvalidArgumentException', raison : '*** -[NSKeyedUnarchiver initForReadingWithData:]: archive incompréhensible (0x4e, 0x49, 0x42, 0x41, 0x72, 0x63, 0x68, 0x69)'
2012-01-15 09:35:53.025 MyApp[3026:207] Empilement : (
    808001701,
    805397928,
    807551015,
    807550919,
    810902709,
    815043196,
    815042704,
    814682908,
    814682012,
    814970032,
    814968048,
    814966908,
    839149932,
    807750263,
    807747947,
    814678868,
    814672532,
    61527,
    10764
)
terminé appelé après le lancement d'une instance de '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
Langue actuelle :  auto; actuellement objective-c

Des idées sur ce que c'est et comment le résoudre ?

Je construis avec Xcode 4.2.1.

PS - Le problème n'est pas résolu en nettoyant la construction ou en resauvegardant les fichiers .xib. Parfois l'application passera cette étape mais plantera apparemment pour la même raison lorsqu'elle rencontrera un autre .xib plus tard, par exemple lors du chargement d'un contrôleur de vue.

2voto

SK9 Points 9683

Cette réponse, à mon avis, couvre ce que Ikuragames aurait pu donner (il n'est pas près de son ordinateur). En son nom, pour résoudre le problème dans Xcode 4.2.1, cliquez sur le fichier .xib et dans le panneau des propriétés du fichier sur le côté droit, définissez le déploiement sur "iOS 3.0" (dans mon cas) et le développement sur "Interface Builder 3.0" (encore une fois dans mon cas). Faites cela pour chaque fichier .xib dans le projet.

Il est bon de garder à l'esprit que Xcode 4.2.1 pourrait bien définir par défaut "iOS 5.0" pour le déploiement ici, pour correspondre au SDK actuel, et "Xcode 4.1" pour le type de document. Pourquoi Xcode ne fait pas simplement correspondre la cible de déploiement avec la cible de déploiement du projet, je ne suis pas sûr...

Si cela ne fonctionne toujours pas ou si vous êtes très paranoïaque à ce stade, attrapez l'exception levée par le NSKeyedUnarchiver lors du chargement du fichier .xib et créez la vue de manière programmatique.

description de l'image

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X