presentViewController: arresto anomalo su iOS <6 (AutoLayout)


92

Questo è uno strano incidente che sto subendo. Il crash si verifica quando premo un pulsante che va a un determinato ViewController. La linea su cui si blocca è:

DestinationInformationViewController *info = [[DestinationInformationViewController alloc] init];
[info setModalTransitionStyle: UIModalTransitionStyleCrossDissolve];
[self presentViewController:info animated:YES completion: nil]; // CRASHES HERE
[info release];

La traccia del crash è:

*** Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named NSLayoutConstraint' *** First throw call stack: (0x3758288f 0x35287259 0x37582789 0x375827ab 0x3153d54d 0x3153d6bb 0x3153d423 0x314ce001 0x3143c3c7 0x31319c59 0x3128fc17 0x3129a267 0x3129a1d5 0x3133959b 0x31338367 0x84091 0x374dc3fd 0x31271e07 0x31271dc3 0x31271da1 0x31271b11 0x31272449 0x3127092b 0x31270319 0x31256695 0x31255f3b 0x33c9822b 0x37556523 0x375564c5 0x37555313 0x374d84a5 0x374d836d 0x33c97439 0x31284cd5 0x82bb3 0x71200) terminate called throwing an exception(gdb) Could not instantiate class named NSLayoutConstraint

NOTA: questo si blocca sul mio iPhone 4 iOS 5.1 ma non sul mio iPhone 4S iOS 6 Beta 2


2
Ho avuto lo stesso problema dopo l'aggiornamento a Xcode 4.5 in esecuzione e app su iPhone 5.1 Guarda questo link: artstudioh.com/calculator/images/error_xcode.png
Sinuhe Huidobro

Sì, penso che l'abbiamo stabilito :)
MCKapur

Risposte:


201

Credo che questo sia un problema con il nuovo generatore di interfacce di Xcode. Ti è capitato di costruire il tuo .xib usando il generatore di interfacce di Xcode 4.5? Mi sono imbattuto in questo stesso problema proprio ora, e penso che sia questo il problema. La mia app funziona su iOS 6, ma niente di più vecchio.

E devi assicurarti di disattivare i Use Auto Layouttuoi xibs .

Ciò può essere fatto da:

  1. Apri il tuo xib.
  2. Vai alla File Inspectorscheda.
  3. Trova la Interface Builder Documentsezione sulla barra degli strumenti a destra.
  4. Deseleziona l' Use Auto Layoutopzione.

37
Sì, devi assicurarti di disattivare "usa layout automatico" per i tuoi pennini.
Wevah

Sì, stesso problema. Cosa fare al riguardo? Dovrei provarlo su Xcode 4.4 (questo potrebbe essere il motivo, per qualche strano motivo il mio iPhone 4 iOS 5.1 può funzionare su Xcode 4.5 ... anche se non è iOS 6)
MCKapur

16
Nella vista principale del tuo xib, sezione Document builder dell'interfaccia sulla barra degli strumenti a destra.
Mark

Per chiunque fosse interessato, ho creato un file pennino in Xcode 4.5 per un vecchio controller di visualizzazione che impostava la sua visualizzazione a livello di codice. Presto ho capito che il mio nuovo pennino non avrebbe funzionato in iOS 5, quindi ho cancellato il file del pennino e ho iniziato a ricevere un errore simile, anche se il nuovo file del pennino non era più nemmeno nel mio progetto! La soluzione era rinominare i file .he .m, ugh.
Keller

2
Un po 'di preoccupazione per ciò che sta accadendo al controllo di qualità in Apple in questi giorni.
ardochhigh

43

Immagine dello schermo

Ho avuto lo stesso problema quando ho scaricato il nuovo aggiornamento XCode e IOS6 SDK. Ecco come l'ho risolto:

Seleziona il file Interface builder (se xib o storyboard) in cui si verifica l'errore. Nell'Assistente editor sulla destra in XCode, seleziona la prima scheda da sinistra e c'è una casella di controllo per l'opzione "Usa layout automatico" come nello screenshot qui sopra. Deseleziona la casella di controllo.


4

Nagaraja chiede "Come risolvere lo stesso se non stiamo usando xib? Mi sono imbattuto esattamente in questo problema. Ho creato un controller con un xib e poi ho deciso di rimuovere il file xib. Il crash non è andato via. Il problema era che avevo bisogno di implementare

- (void) loadView

nella mia classe controller. Una volta implementato questo metodo, il problema è stato risolto.


1

Un altro possibile motivo per un arresto anomalo con presentViewController è avere qualcosa nel pennino connesso a una variabile che non è più lì: la variabile ha cambiato nome o è stata eliminata.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.