NSInvalidUnarchiveOperationException: nie można utworzyć wystąpienia klasy o nazwie NSLayoutConstraint

165

Jestem w tym bardzo nowy. Postępowałem zgodnie z instrukcją Apple'a krok po kroku dla projektu iPhone'a „HelloWorld”. Uruchomiłem go w symulatorze iPhone'a 5.0 i się zawiesił:

2012-11-02 14: 46: 06.782 HelloWorld [9880: c07] * Zakończenie aplikacji z powodu nieprzechwyconego wyjątku „NSInvalidUnarchiveOperationException”, powód: „Nie można utworzyć instancji klasy o nazwie NSLayoutConstraint” * Pierwszy rzut wywołań stosu: (0x14a2052 0xea2d0a 0x144aa787 0x144a9e 0x32f6b7 0x23036d 0xd7e2c 0xd83a9 0xd85cb 0x38a73 0x38ce2 0x38ea8 0x3fd9a 0x10be6 0x118a6 0x20743 0x211f8 0x14aa9 0x138cfa9 0x14761c5 0x13db022 0x3fd9a 0x10be6 0x118a6 0x20743 0x211f8 0x14aa9 0x138cfa9 0x14761c5 0x13db022 0x3fd9a 0x10be6 0x118a6 0x20743 0x211f8 0x14aa9 0x138cfa9 0x14761c5 0x13db022 0x3fd9a 0x10be6 0x118a6 0x20743 0x211f8 0x14aa9 0x138cfa9 0x14761c5 0x13db022 0x3fd9a

Czy ktoś może mi powiedzieć, co poszło nie tak? Używam Xcode 4.5.

user1703590
źródło
Trzeba wyłączyć funkcję autoLayout w XI b / ujęć
berylu

Odpowiedzi:

575

Domyślnie podczas tworzenia nowego projektu systemu iOS w Xcode 4.5 scenorys lub XIB jest skonfigurowany do korzystania z funkcji Autolayout, która jest nową funkcją w systemie iOS 6.0. NSLayoutConstraintKlasa jest częścią systemu autoLayout, i to nie istnieje w starszych wersjach iOS.

Jeśli chcesz wdrożyć aplikację na starszą wersję systemu iOS, musisz zmienić scenorys lub XIB, aby nie używać funkcji Autolayout. To pole wyboru w Inspektorze plików:

wyłączanie autoukładu

rob mayoff
źródło
29
Użyłem ScreenFlow do przechwytywania i przycinania. Użyłem Photoshopa, aby zamienić .mov na .gif.
rob mayoff
Dotyczy to również XIB!
virata
Wykonanie tej czynności powoduje wyłączenie obracania widoku z pionowego na poziomy, nawet jeśli metody zostały zaimplementowane. Jak rozwiązałeś problem, jeśli nadal chcesz, aby rotacja miała miejsce? Z góry dziękuję i ... niezły gif ^^
aGit
@robmayoff dzięki za gif i doskonałą odpowiedź. mój problem został rozwiązany w ciągu sekundy. :)
ishhhh
Podobało mi się to, więc stworzyłem własne dla punktów przerwania wyjątków. rsaunders.co.uk/2013/06/add-exception-breakpoint.html
Robert
21

Twój plik Xib (plik konstruktora interfejsu) zawiera elementy AutoLayout, których nie obsługuje system iOS 5 .

W Xcode przejdź do plików .xib i dla każdego z nich wyłącz AutoLayout. Po lewej stronie powinno znajdować się pole wyboru „Użyj autoukładu”, odznacz je i spróbuj ponownie. (To jest pod pierwszą zakładką w inspektorze po lewej stronie, jeśli masz właściciela pliku).

WDUK
źródło
8

Natknąłem się na ten błąd podczas pracy nad starszym projektem, który chciałem zaktualizować. Zaznaczyłem pole wyboru „Użyj automatycznego układu”, aby rozpocząć pracę z ograniczeniami, ale zapomniałem zaktualizować ustawienia celu wdrożenia do iOS 6.

jbryant
źródło
7

Musisz go uruchomić w symulatorze iPhone'a 6.0. Twój błąd:

* Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named NSLayoutConstraint' *

Sugeruje, że używasz autoukładu, który działa tylko na iOS 6.

yeesterbunny
źródło