NSInvalidUnarchiveOperationException: Не вдалося інстанціювати клас з назвою NSLayoutConstraint


165

Я дуже новачок у цьому. Я дотримувався посібника Apple, крок за кроком, для проекту iPhone "HelloWorld". Я запустив його в тренажері iPhone 5.0, і він зазнав аварії:

2012-11-02 14: 46: 06.782 HelloWorld [9880: c07] * Закінчення програми через невловимий виняток "NSInvalidUnarchiveOperationException", причина: "Не вдалося інстанціювати клас з назвою NSLayoutConstraint" * Стек першого виклику кидок: (0x14a2052 0xea2d0a 0x144a 0x144a 0x144a 0x144a 0x144a 0x144a 0x144a 0x144a 0x144a 0x144a 0x144a 0x144a 0x144a 0x144a 0x144a 0x144a 0x144a 0x144a 0x144a 0x144a 0x144a 0x144a 0x144a 0x144a 0x32f6b7 0x23036d 0xd7e2c 0xd83a9 0xd85cb 0x38a73 0x38ce2 0x38ea8 0x3fd9a 0x10be6 0x118a6 0x20743 0x211f8 0x14aa9 0x138cfa9 0x14761c5 0x13db022 0x13d990a 0x13d8db4 0x13d8ccb 0x112a7 0x12a9b 0x1fed 0x1f15 0x1 ) Terminate називається кидати виняток (lldb)

Може хтось, будь ласка, скаже мені, що пішло не так? Я використовую Xcode 4.5.


Ви повинні вимкнути функцію Autolayout у xib / storyboard
берилій

Відповіді:


575

За замовчуванням, коли ви створюєте новий проект iOS у Xcode 4.5, ваша архівна дошка або XIB налаштовано на використання Autolayout, що є новою функцією в iOS 6.0. NSLayoutConstraintКлас є частиною системи Autolayout, і вона не існує в більш ранніх версіях IOS.

Якщо ви хочете розгорнути свою програму на більш старій версії iOS, вам потрібно змінити дошку та XIB, щоб не використовувати Autolayout. Це прапорець у інспекторі файлів:

вимкнення автоматичного розкладу


29
Я використовував ScreenFlow для зйомки та обрізання. Я скористався Photoshop, щоб перетворити .mov у формат .gif.
грабувати майофф

Це стосується і xib!
virata

Це вимикає поворот перегляду від портрета до пейзажу, навіть застосовуючи методи. Як ви вирішили цю проблему, якщо ви все ще хочете, щоб відбулася ротація? Дякую заздалегідь, і ... приємний gif ^^
aGit

@robmayoff дякую за подарунок і ідеальну відповідь. мою проблему вирішили за секунду. :)
ishhhh

Мені це сподобалось, тому я створив власну для винятків точки проходу. rsaunders.co.uk/2013/06/add-exception-breakpoint.html
Роберт

21

Ваш Xib-файл (файл конструктора інтерфейсів) містить елементи AutoLayout, які iOS 5 не підтримує.

У Xcode перейдіть до файлів .xib і для кожного вимкніть автоматичну розкладку. Ліворуч має бути прапорець із написом "Використовувати автоматичну розкладку", зніміть її та спробуйте ще раз. (Це під першою вкладкою в лівій частині інспектора, коли у вас є власник файлу).


8

Я наткнувся на цю помилку, коли працював над старішим проектом, який хотів оновити. Я встановив прапорець "Використовувати автоматичну розстановку", щоб почати працювати з обмеженнями, але забув оновити налаштування Цілі розгортання до iOS 6.


7

Вам потрібно запустити його в тренажері iPhone 6.0. Ваша помилка:

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

Передбачає, що ви використовуєте автоматичний розклад, який працює лише на iOS 6.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.