presentViewController: Absturz unter iOS <6 (AutoLayout)

92

Dies ist ein seltsamer Absturz, den ich bekomme. Der Absturz tritt auf, wenn ich eine Taste drücke, die zu einem bestimmten ViewController führt. Die Linie, auf der es abstürzt, ist:

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

Die Absturzverfolgung lautet:

*** 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

HINWEIS: Dies stürzt auf meinem iPhone 4 iOS 5.1 ab, nicht jedoch auf meinem iPhone 4S iOS 6 Beta 2

MCKapur
quelle
2
Ich hatte das gleiche Problem nach dem Upgrade auf Xcode 4.5 und App auf dem iPhone 5.1. Schauen Sie sich diesen Link an: artstudioh.com/calculator/images/error_xcode.png
Sinuhe Huidobro
Ja, ich denke, wir haben das festgestellt :)
MCKapur

Antworten:

201

Ich glaube, dies ist ein Problem mit dem neuen Interface Builder von Xcode. Haben Sie Ihre .xib zufällig mit dem Interface Builder von Xcode 4.5 erstellt? Ich bin gerade auf dasselbe Problem gestoßen, und ich denke, das ist das Problem. Meine App läuft unter iOS 6, aber nichts älteres.

Und Sie müssen sicherstellen, dass Sie Use Auto Layoutfür Ihre xibs ausschalten .

Das kann gemacht werden durch:

  1. Öffne deine xib.
  2. Gehen Sie zur File InspectorRegisterkarte.
  3. Suchen Sie den Interface Builder DocumentAbschnitt in der rechten Symbolleiste.
  4. Deaktivieren Sie die Use Auto LayoutOption.
Kennzeichen
quelle
37
Ja, Sie müssen sicherstellen, dass Sie "Automatisches Layout verwenden" für Ihre Schreibfedern deaktivieren.
Wevah
Ja, das gleiche Problem. Was tun? Sollte ich es auf Xcode 4.4 testen (das könnte der Grund sein, aus irgendeinem seltsamen Grund kann mein iPhone 4 iOS 5.1 auf Xcode 4.5 laufen ... obwohl es nicht iOS 6 ist)
MCKapur
16
In der Hauptansicht Ihrer xib befindet sich der Abschnitt Interface Builder Document in der rechten Symbolleiste.
Mark
Für alle Interessierten habe ich in Xcode 4.5 eine NIB-Datei für einen alten Ansichts-Controller erstellt, der seine Ansicht programmgesteuert einrichtet. Ich stellte schnell fest, dass meine neue Schreibfeder in iOS 5 nicht funktionieren würde, also löschte ich die Schreibfeder-Datei und bekam einen ähnlichen Fehler, obwohl ich dachte, die neue Schreibfeder-Datei sei nicht mehr in meinem Projekt! Die Lösung bestand darin, die Dateien .h und .m umzubenennen.
Keller
2
Ein bisschen beunruhigend, was heutzutage mit der Qualitätskontrolle bei Apple passiert.
Ardochhigh
43

Bildschirmfoto

Ich hatte das gleiche Problem, als ich das neue XCode-Update und das IOS6 SDK heruntergeladen habe. So habe ich es gelöst:

Wählen Sie die Interface Builder-Datei (ob xib- oder Storyboard-Datei) aus, in der Ihr Fehler auftritt. Wählen Sie im Assistenten-Editor rechts in XCode die erste Registerkarte von links aus, und es gibt ein Kontrollkästchen für die Option "Autolayout verwenden" wie im obigen Screenshot. Deaktivieren Sie das Kontrollkästchen.

Dejan Balaban
quelle
4

Nagaraja fragt: "Wie kann ich dasselbe beheben, wenn wir xib nicht verwenden? Ich bin genau auf dieses Problem gestoßen. Ich habe einen Controller mit xib erstellt und dann beschlossen, die xib-Datei zu entfernen. Der Absturz ist nicht behoben. Das Problem war das musste ich umsetzen

- (void) loadView

in meiner Controller-Klasse. Nachdem ich diese Methode implementiert hatte, wurde das Problem gelöst.

DDRider62
quelle
1

Ein weiterer möglicher Grund für einen Absturz mit presentViewController ist, dass etwas in der Feder mit einer Variablen verbunden ist, die nicht mehr vorhanden ist - die Variable hat entweder ihren Namen geändert oder sie wurde gelöscht.

Chris Walken
quelle