Подтвердить что ты не робот

Не удалось создать экземпляр класса IBNSLayoutConstraint

Я использую XCode6 beta и тестирую Swift. Когда я устанавливаю некоторые ограничения макета в контроллере представления, приложение выходит из строя со следующей ошибкой:   Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named IBNSLayoutConstraint'

4b9b3361

Ответ 1

Вы получаете эту ошибку, потому что вы установили ограничение на IBOutlet, который удален во время выполнения. Это происходит, когда вы устанавливаете ограничение в качестве заполнителя в Interface Builder. Так как ограничение удаляется, когда оно идет, чтобы разобрать его, оно вызывает ошибку, говоря, что не может этого сделать.

Есть два способа исправить это.

Метод 1

  • Щелкните правой кнопкой мыши свой раскадровки > Открыть как > Исходный код
  • В открывшемся раскадровке xml найдите placeholder="YES".
  • Вы найдете ограничения, которые должны быть удалены во время выполнения. Удалите атрибут placeholder из ограничения, сохраните и закройте.
  • Запустите приложение, и ваша проблема должна быть исправлена.

Метод 2

  • Найдите ограничение, вызывающее проблемы в Interface Builder. Снимите флажок в поле "Заполнитель" в графическом интерфейсе. Это должно быть одним из ограничений, которые устанавливаются в IBOutlet в ViewController, что приводит к вашему сбою.

Interface Builder attribute editor showing the Placeholder option checked.

Вот как это должно выглядеть:

Interface Builder attribute editor showing the Placeholder option unchecked.

Alternative

Предполагая, что вы действительно хотите, чтобы ограничение было заполнителем, вам нужно удалить любые реферирующие точки. Для этого выберите ограничение, которое вы хотите заполнить. Затем откройте инспектор соединений (кнопка, наиболее удаленная вправо, которая выглядит так: (- > )), а затем удалите любые реферирующие точки, которые могут существовать на этом ограничении.

Ответ 2

У меня была такая же проблема только сейчас, и для меня это работало.

Я выпустил рабочую версию своего приложения в App Store, вернувшись к ней снова через несколько дней, нажав на мои мои вкладки в UITabBarController, он разбился с ошибкой:

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

У меня не было никаких ограничений компоновщика, о которых я знал, или ограничений, которые не должны были быть определены.

Решение для меня состояло в том, чтобы просто отключить классы размеров и сохранить данные класса размера для iPhone (приложение предназначено только для iPhone). Это, должно быть, удалило все, что я пропустил в классах размера. Я хочу классы размера, поэтому я включил их, и приложение просто снова работало.

Ответ 3

Это может быть не обязательно проблема ограничения. Для меня это было вызвано не проверкой "Установлено" для класса размера, который применялся к моему расположению, см. Здесь install необходимо проверить

Ответ 4

Возникла некоторая проблема с использованием классов размера. Я отключил эту опцию из свойств раскадровки и использовал только автоматический макет. Это была не такая уж большая проблема, поскольку приложение предназначено только для iPhone.

Ответ 5

То, что в итоге произошло со мной, заключалось в том, что я разрезал subview внутри Interface Builder, чтобы скопировать его в другой xib. Это оставило subview в оригинальном построителе интерфейса xib, поскольку он был выделен серым цветом. После удаления из него исходного объекта (путем выбора и удаления). Я смог избавиться от ошибки.

Ответ 6

В окне инспектора есть опция, когда вы выбираете файл xib, который не будет использовать ограничения в разделе "Показать файл инспектором" в инспекторе, который называется "Использовать автозапуск".

Ответ 7

Я сделал изменение в представлении прокрутки, чтобы позволить встроенным в него элементам управления сборщиком работать с использованием решения, которое я нашел в другом месте в Stackoverflow. Моя новая раскадровка просто добавила эти атрибуты в вид прокрутки, что показалось мне прекрасным.

     delaysContentTouches="NO" canCancelContentTouches="NO"

Но кроме того, я увидел в своей раскадровке в другой сцене следующий новый фрагмент:

                    <variation key="default">
                        <mask key="subviews">
                            <exclude reference="86H-aM-wei"/>
                        </mask>
                    </variation>

Я понятия не имею, откуда она взялась. Сначала я проигнорировал это, потому что все, казалось, работало на моей машине dev. Но когда сборка была построена как релиз и протестирована, я получил крах. Удаление этого ложного (?) Фрагмента зафиксировало сбой и, похоже, не повлияло ни на что другое.

Ответ 8

У меня была эта проблема, когда у меня была кнопка в пользовательском UICollectionViewCell и имела некоторые из ее ограничений как IBOutlets в этом классе. Я переместил кнопку из ячейки в контроллер родительского представления, и IBOutlets все еще ссылались в ячейке, но на самом деле не существовали в ячейке, поэтому все взорвалось. Просто нужно было удалить эти IBOutlets, и все снова работало отлично!