NSInvalidUnarchiveOperationException: Не удалось создать экземпляр класса с именем NSLayoutConstraint

165

Я очень новичок в этом. Я шаг за шагом следовал руководству Apple для проекта iPhone «HelloWorld». Я запустил его в симуляторе iPhone 5.0, и он упал:

2012-11-02 14: 46: 06.782 HelloWorld [9880: c07] * Завершение работы приложения из-за необработанного исключения «NSInvalidUnarchiveOperationException», причина: «Не удалось создать экземпляр класса с именем NSLayoutConstraint» * Стек первого вызова вызова: (0x14a2052 0xea2d0a 0x14432f0 07 0 0 0 7 0 9 7 0 9 0 7 0 9 7 0 9 0 7 7 0 9 0 7 7 9 0 9 7 9 0 9 7 9 0 9 0 9 0 9 0 8 8 9 8 8 8 9 9 9 9 9, 9, 08, 08 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.

user1703590
источник
Вы должны отключить функцию 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!
Вирата
Это отключает поворот вида из портрета в пейзаж, даже если методы реализованы. Как вы решили проблему, если хотите, чтобы ротация продолжалась? Заранее спасибо, и ... хороший gif ^^
aGit
@robmayoff спасибо за GIF и отличный ответ. моя проблема была решена за секунду. :)
Ишххх
Мне понравилось это, поэтому я создал свой собственный для точек останова исключения. rsaunders.co.uk/2013/06/add-exception-breakpoint.html
Роберт
21

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

В XCode перейдите к своим файлам .xib, и для каждого из них отключите AutoLayout. Слева должен быть флажок «Использовать автоматическую разметку», снимите флажок и попробуйте снова. (Это на первой вкладке в левой части инспектора, когда у вас есть владелец файла).

WDUK
источник
8

Я наткнулся на эту ошибку, когда работал над старым проектом, который хотел обновить. Я установил флажок «Использовать Autolayout», чтобы начать работу с ограничениями, но забыл обновить настройку цели развертывания до iOS 6.

jbryant
источник
7

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

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

Предполагает, что вы используете autolayout, который работает только на iOS 6.

yeesterbunny
источник