Я использую бета-версию XCode6 и пробую Swift. Когда я устанавливаю некоторые ограничения автоматического макета в контроллер представления, приложение вылетает со следующей ошибкой:
Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named IBNSLayoutConstraint'
81
Ответы:
Вы получаете эту ошибку, потому что вы установили ограничение для IBOutlet, которое удаляется во время выполнения. Это происходит, когда вы устанавливаете ограничение как заполнитель в Интерфейсном Разработчике. Поскольку ограничение удаляется, когда он идет на разархивирование, он выдает ошибку, говоря, что он не может этого сделать.
Есть два способа исправить это.
Способ 1
placeholder="YES"
.Способ 2
Вот как это должно выглядеть:
Альтернатива
Предполагая, что вы действительно хотите, чтобы ограничение было заполнителем, вам нужно удалить все ссылки на выходы. Для этого выберите ограничение, которое вы хотите использовать в качестве заполнителя. Затем откройте инспектор соединений (крайняя справа кнопка, которая выглядит следующим образом: (->)), а затем удалите все ссылки на выходы, которые могут существовать в этом ограничении.
источник
У меня была такая же проблема сейчас, и у меня сработало следующее.
Я выпустил рабочую версию своего приложения в App Store, вернулся к работе снова через несколько дней, нажав на одну из вкладок в UITabBarController, она вылетела с ошибкой:
Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named IBNSLayoutConstraint'
У меня не было никаких ограничений макета заполнителя, о которых я знал, или ограничений на выходы, которые не следовало определять.
Для меня решением было просто отключить классы размеров и сохранить данные классов размеров для iPhone (приложение только для iPhone). Должно быть, это удалило все, что я пропустил в классах размеров. Мне нужны классы размеров, поэтому я снова их включил, и приложение снова заработало.
источник
Это не обязательно может быть проблемой ограничения. Для меня это было вызвано тем, что я не проверил "Установлено" для класса размера, который применялся к моему макету, см. Здесь
источник
Возникла проблема с использованием классов размеров. Я отключил эту опцию в свойствах раскадровки и использую только автоматический макет. Это не было такой большой проблемой, поскольку приложение предназначено только для iPhone.
источник
В конечном итоге со мной произошло то, что я вырезал подвид внутри Interface Builder, чтобы скопировать его в другой xib. Это оставило подпредставление в исходном конструкторе интерфейса xib, и оно было неактивным. После удаления подпредставления с исходного места (путем выбора и удаления). Мне удалось избавиться от ошибки.
источник
В окне инспектора есть опция, когда вы выбираете xib-файл, который не будет использовать ограничения под «Показать файл инспектором» в инспекторе под названием «Использовать автоматическое размещение».
источник
Я внес изменения в представление прокрутки, чтобы встроенные в него элементы управления выбора могли работать должным образом, используя решение, которое я нашел в другом месте в Stackoverflow. Моя новая раскадровка просто добавила эти атрибуты в представление прокрутки, что мне показалось нормальным.
delaysContentTouches="NO" canCancelContentTouches="NO"
Но, кроме того, я увидел в своей раскадровке в другой сцене следующий новый фрагмент:
<variation key="default"> <mask key="subviews"> <exclude reference="86H-aM-wei"/> </mask> </variation>
Понятия не имею, откуда это взялось. Сначала я проигнорировал это, потому что, казалось, все работает на моей машине разработчика. Но когда сборка была собрана как Release и протестирована, у меня произошел сбой. Удаление этого ложного (?) Фрагмента устранило сбой и, похоже, не повлияло ни на что другое.
источник
У меня была эта проблема, когда у меня была кнопка в пользовательском UICollectionViewCell и некоторые из ее ограничений были IBOutlets в этом классе. Я переместил кнопку из ячейки в родительский контроллер представления, и IBOutlets все еще упоминались в ячейке, но на самом деле не существовали в ячейке, поэтому все взорвали. Просто нужно было удалить эти IBOutlets, и все снова заработало!
источник