presentViewController: awaria w systemie iOS <6 (AutoLayout)

92

To dziwna awaria. Awaria następuje po naciśnięciu przycisku, który przechodzi do określonego ViewController. Linia, na której się zawiesza to:

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

Ślad awarii to:

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

UWAGA: to ulega awarii na moim iPhonie 4 iOS 5.1, ale nie na moim iPhonie 4S iOS 6 Beta 2

MCKapur
źródło
2
Miałem ten sam problem po uaktualnieniu do Xcode 4.5 uruchomionego i aplikacji na iPhone'a
Sinuhe Huidobro
Tak, myślę, że to ustaliliśmy :)
MCKapur,

Odpowiedzi:

201

Uważam, że jest to problem z nowym narzędziem do tworzenia interfejsu Xcode. Czy zdarzyło Ci się zbudować plik .xib za pomocą narzędzia do tworzenia interfejsu Xcode 4.5? Właśnie napotkałem ten sam problem i myślę, że to jest problem. Moja aplikacja działa na iOS 6, ale nie ma nic starszego.

I musisz się upewnić, że wyłączyłeś Use Auto Layoutswoje XIBS .

Można to zrobić poprzez:

  1. Otwórz swój xib.
  2. Przejdź do File Inspectorzakładki.
  3. Znajdź Interface Builder Documentsekcję na prawym pasku narzędzi.
  4. Odznacz Use Auto Layoutopcję.
znak
źródło
37
Tak, musisz się upewnić, że wyłączyłeś opcję „użyj automatycznego układu” dla swoich stalówek.
Wevah,
Tak, ten sam problem. Co z tym zrobić? Czy powinienem to przetestować na Xcode 4.4 (to może być powód, z jakiegoś dziwnego powodu mój iPhone 4 iOS 5.1 może działać na Xcode 4.5 ... nawet jeśli nie jest to iOS 6)
MCKapur
16
W głównym widoku twojego xib, sekcja Interface builder Document na prawym pasku narzędzi.
Mark
Dla wszystkich zainteresowanych stworzyłem plik nib w Xcode 4.5 dla starego kontrolera widoku, który programowo konfiguruje swój widok. Wkrótce zdałem sobie sprawę, że moja nowa końcówka nie będzie działać w iOS 5, więc usunąłem plik nib i zacząłem otrzymywać podobny błąd, nawet myśląc, że nowy plik nib nie był już nawet w moim projekcie! Rozwiązaniem była zmiana nazw plików .h i .m, ugh.
Keller
2
Niepokojące, co dzieje się obecnie z kontrolą jakości w Apple.
ardochhigh
43

Zrzut ekranu

Miałem ten sam problem, kiedy pobrałem nową aktualizację XCode i IOS6 SDK. Oto jak to rozwiązałem:

Wybierz plik Konstruktora interfejsu (XIB lub plik scenorysu), w którym występuje błąd. W edytorze pomocniczym po prawej stronie w XCode wybierz pierwszą zakładkę od lewej i jest tam pole wyboru dla opcji „Użyj Autolayout” jak na powyższym zrzucie ekranu. Usuń zaznaczenie pola wyboru.

Dejan Balaban
źródło
4

Nagaraja pyta "Jak rozwiązać to samo, jeśli nie używamy xib? Natknąłem się dokładnie na ten problem. Stworzyłem kontroler z xib, a potem zdecydowałem się usunąć plik xib. Awaria nie zniknęła. Problem był które musiałem wdrożyć

- (void) loadView

w mojej klasie kontrolera. Po wdrożeniu tej metody problem został rozwiązany.

DDRider62
źródło
1

Innym możliwym powodem awarii z presentViewController jest posiadanie czegoś w końcówce połączonej ze zmienną, której już tam nie ma - zmienna ma zmienioną nazwę lub została usunięta.

Chris Walken
źródło