Предупреждение Storyboard Xcode: Ограничение ссылки на элементы отключены в текущей конфигурации. Отключите это ограничение в текущей конфигурации


146

Это предупреждение происходит в Xcode 6.1. У кого-нибудь есть идеи, что означает это предупреждение и что с ним будет? Большое спасибо!

Ниже скриншот с открытыми предупреждениями в исходном коде

введите описание изображения здесь

Как найти, какое ограничение вызывает предупреждение? Xcode не говорит вам, какое ограничение является проблемой.

введите описание изображения здесь


@wumm да, приложение может быть успешно собрано и запущено, я просто беспокоюсь, что могут возникнуть какие-то потенциальные проблемы, с которыми я еще не сталкивался.
Чжихао Ян

7
Обратите внимание, что в целом эта проблема вызвана: у вас есть элемент, который не установлен, но у него есть ограничения, которые все еще установлены. В общем, найдите неустановленный элемент, и для всех его ограничений отметьте его как неустановленный.
Толстяк

@ Толстяк Пожалуйста, отредактируйте принятый ответ по этой основной причине. Спасибо
Милан Камиля

Ответы:


431

Это предупреждение может раздражать и возникает с Xcode 6.1.1. Основная проблема заключается в том, что вы не можете легко найти указанное ограничение, нажав на предупреждение. Я думаю, что это ошибка, и она будет исправлена ​​рано или поздно.

Тем не менее, тем временем вы можете использовать этот маленький обходной путь:

Шаг 1: Обнаружить раздражающее предупреждение 😱

Раздражающее предупреждение

Шаг 2: Право / Ctrl-клик по предупреждению, выберите Reveal in Log😨

введите описание изображения здесь

Шаг 3: Полюбуйтесь красотой следующего фрагмента журнала:

... snip ...
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:Dlb-cb-nWC: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:6Ze-mO-v5N: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:9av-xw-u1o: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:RPt-Uf-vaZ: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:Rnc-4M-7jV: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:epJ-D9-KEF: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:4HC-Gu-01w: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
... snip ...

Хммм ... Что это ...?

интересный

Шаг 4: Давайте добавим это в строку поиска проекта ... 😐

поиск

😮 Да, вы правильно догадались. Нажмите на это.

Шаг 5: 😁 Боже мой! Наслаждайтесь несколькими дополнительными минутами производительности, пока Apple не исправит эту досадную ошибку. 😎

Wheeee


На 2016 год ...

  • Если вы не можете получить его с помощью «Показать в журнале», покажите Навигатор отчетов. (Это самая правая вкладка в крайнем левом столбце.) Погрузитесь в результаты сборки там. Это покажет журнал сборки, включая идентификатор ограничения. любезно buildsucceeded

введите описание изображения здесь

введите описание изображения здесь

  • Обратите внимание, что для Xcode от 5/2016, к сожалению, вы должны выйти и перезапустить Xcode, чтобы очистить это предупреждение в некоторых случаях.

  • Обратите внимание, что такая же ошибка может быть вызвана не связанной с этим проблемой (это может быть ошибка Apple или плохое использование языка ошибок): если у вас есть IBInspectableэлементы, и вы можете переименовать их в ваших файлах Swift. XCode не удаляет старое имя UserDefinedRuntimeAttributes для вас. Просто нажмите «Identity Inspector» (пункт 3 на правой панели) и удалите ненужные элементы.

На 2017 год ...

  • Еще одна распространенная и более простая причина проблемы. Если вы случайно деинсталлировать деталь: Как письма, очень просто Xcode не знает, также автоматически удалять любые ограничения , которые приводят к этому пункту . Проще говоря, посмотрите на все неустановленные элементы, и для всех его ограничений, просто отметьте их как неустановленные. (Или просто, возможно, просто временно удалите неустановленный элемент, чтобы узнать, в этом ли проблема.)

28
Это объяснение было удивительным. Спасибо!
Томасмальт

7
Мой любимый ответ недели :) И очень полезный. Спасибо!
часов

5
Я думаю, что эмоджи должны требоваться в ответах отныне.
Джеймс Вебстер

3
Что если Reveal in Log выделен серым цветом, как в моем случае?
Bakalolo

6
Мой правый клик -> Показать журнал ничего не делал, поэтому я открыл журналы, используя это как ref: stackoverflow.com/questions/19014359/…
terrigenus

39

Это сообщение появляется, когда вы деактивировали представление в раскадровке, но не деактивировали ограничения, основанные на этом представлении.

Например, вы деактивировали кнопку, но у вас все еще есть некоторые ограничения, связанные с этой кнопкой. Это может быть внутреннее ограничение, например, высота или ширина, или относительное ограничение, например, расстояние от другого вида.

Вы должны отключить каждое из ограничений, относящихся к представлению, и сделать это вручную. XCode здесь слишком консервативен и не сделает этого за вас.


4
Спасибо за ваш ответ! Не могли бы вы конкретизировать, что такое «деактивировать представление»? Это чтобы удалить вид (как кнопка)? но так как я уже удалил его, ограничение также может быть удалено и не может быть найдено? А как «отключить ограничение» поподробнее, просто выделите и удалите его? Большое спасибо!
Чжихао Ян

2
Если представление не помечено как «Установлено» в Интерфейсном Разработчике для его текущего класса размера, то оно деактивируется.
DivideByZer0

У меня есть много ViewControllers в моей раскадровке. ¿Как я узнаю, какой из них имеет неустановленное подпредставление?
Jobima

Вы можете нажать правой кнопкой мыши на предупреждение и выбрать опцию «Исходный код». Там вы должны четко видеть иерархию соответствующего представления в уважаемом контроллере представления.
ЗаЭМ ЗаФаР

15

Это решение работает для меня.

Поскольку я скопировал несколько элементов из проекта, который разработал в Xcode 5, в Xcode 6, а раскадровка в Xcode 6 поддерживает несколько макетов, для каждого ограничения мне необходимо установить его в текущей конфигурации.

Например, я использую «Компактная ширина | Обычная высота», для ограничения, которое мне нужно установить, как показано ниже:

введите описание изображения здесь

После того, как я проверил и установил все сотни ограничений в своих проектах, очистил и собрал, предупреждения, наконец, исчезли.


1
Обратите внимание, что Installedв атрибутах объекта просмотра есть и эти надоедливые флажки. Поэтому убедитесь, что для отображаемых объектов, которые, по вашему мнению, отображаются , установлен правильный флажок. Предупреждение говорит о том, что некоторые объекты не отображаются в current configuration.
Мэтт

Это сработало и для меня. XCode сказал, что у меня было 12 или 13 предупреждений, но поиск в журнале одного из них показал, что их было как минимум 100. Поэтому я просмотрел каждое из них, добавив wChR для каждого ограничения, а затем сняв флажок с общего значения «Установлено». Предупреждения исчезли!
Андреас

О, забыл упомянуть. Примерно на полпути я понял, что на самом деле вы можете выполнить этот процесс сразу для нескольких ограничений, выбрав их одновременно.
Андреас

8

Просто хотел добавить мой случай, как эта ошибка произошла для меня: в моем случае я хотел удалить текстовое поле с помощью «Cmd + Backspace». Я сделал это непосредственно в Дереве просмотра сцены:

введите описание изображения здесь

Вы можете видеть, что поле повтора серое.

Так что это было легко обнаружено для меня. Вы можете просто удалить поле, выбрав:

Редактировать-Удалить из меню

Удивительно, но это действительно удаляет поле (включая ограничения). Может быть, это поможет кому-то легко найти причину этого досадного предупреждения ...


Это на самом деле не отвечает на вопрос. Если у вас есть другой вопрос, вы можете задать его, нажав Задать вопрос . Вы также можете добавить вознаграждение, чтобы привлечь больше внимания к этому вопросу, когда у вас будет достаточно репутации . - Из Обзора
Мартин Эванс

3
Это еще один способ исправить заданный вопрос. Так что просто хотел добавить это, чтобы помочь другим ...
Дирк

Спасибо, очень помогли
Ахмед Элашкер

Ответ сузился, как найти и исправить проблему. Это сработало для меня!
Ланс Самария

6

Расширенное объяснение

Ничего плохого в других ответах. Я просто хотел привлечь внимание к формулировке в исходном предупреждении и определить пару вариантов использования, где это может проявиться в рабочем процессе.

ограничение предупреждения

Ограничение ссылок на элементы отключено в текущей конфигурации.

Это означает, что некоторый элемент (обычно видимый элемент управления или пользовательский вид), на который ссылаются в одном или нескольких ограничениях, отключен (отключен или флажок «установлен» снят). Например, если вы решили, что хотите переместить элемент управления или представление в раскадровке за пределы основного представления (или вы можете иногда это видеть при выполнении чего-то интересного в классах размеров), вы можете увидеть это предупреждение, если к элементу управления прикреплены ограничения. ,

неустановленный-контроль

Наряду с рекомендуемым решением:

Отключите это ограничение в текущей конфигурации.

Два подхода к исправлению

Схема документа

Визуально вы можете открыть схему документа в раскадровке и найти выделенные серым цветом ограничения, которые относятся к вашему элементу управления / представлению, находящемуся вне основного вида (расширить контур, щелкнуть ограничение и просмотреть инспектор атрибутов, проведите мышью вниз, чтобы быстро просмотреть) , Затем удалите ограничение из этого контекста (класс размера). Например, в моем случае я просто удерживаю элемент управления до тех пор, пока не решу позже, где его представить, поэтому я решил полностью удалить нарушающее ограничение до следующего. Но в классе размеров я бы просто удалил ограничение из текущего контекста, используя установленный флажок в инспекторе атрибутов.

Log Navigator / Find Tool

Можно также продолжать использовать Log Navigator для поиска проблемного управления по уникальному идентификатору, присваиваемому каждому объекту на раскадровке. В журнале это будет непосредственно перед выделенным желтым текстом и обычно принимает форму, как показано в моем примере выше: jvj-mY-DHf

Используя идентификатор, можно затем использовать инструмент поиска в XCode, чтобы найти и удалить (полностью) или удалить (для текущего контекста) нарушающее ограничение.

лог-навигатор

Если вам нравится Xml и его простота, вы также можете просто открыть раскадровку в качестве исходного кода и найти уникальный идентификатор, вызывающий проблемы, и удалить соответствующий блок xml.


1

Одна из причин, по которой это может произойти, заключается в том, что вы выбрали класс размера, не совместимый с вашими ограничениями ( wAny hAnyэто частый случай). В этом случае просто выберите другой класс размера в Интерфейсном Разработчике, и все готово.


1

Для меня это происходит, если я устанавливаю объекту новое противопоказание для объекта (не для просмотра) с опцией «Ограничение на полях», не отмеченной галочкой. Проблема решена с помощью галочки (по умолчанию).


1

Что сработало для меня (и я понятия не имею, почему), так это отключить «Использовать вариации черт», затем выполнить очистку, а затем снова включить их. Следующая сборка не имела предупреждений.

Чтобы отключить «Использовать варианты признаков», просто выберите раскадровку в Навигаторе проекта, а затем выберите «Инспектор файлов».

введите описание изображения здесь

Затем просто отмените выбор «Использовать варианты признаков», выполните очистку, нажав Shift-CMD K, а затем снова включите варианты признаков, если хотите их использовать.

введите описание изображения здесь


Я не думаю, что это «правильно» само по себе (ограничения исчезают), однако этот ответ был полезен для меня, потому что, как только я возился с этим переключателем, а затем отменил изменения для последнего коммита, Xcode будет приятно обновлять все старые / неправильные / уже исправлены предупреждения такого рода. Кажется, что Xcode будет показывать старые, уже исправленные предупреждения на самом деле много раз - перезапуск Xcode обычно не поможет мне. Если щелкнуть этот переключатель + восстановление до последнего коммита, кажется, появляется следующее «настоящее» предупреждение такого рода; щелчок по нему автоматически выберет проблемное ограничение в IB.
Джонни

0

Я думал, что это было постоянное ограничение из-за другого ответа, однако это было из-за «выхода», который у меня все еще был для элемента, который я удалил ранее. Что делать, это:

  1. Выберите свой ViewController
  2. Нажмите на значок «розетка» в правом верхнем углу
  3. Посмотрите ваши магазины и тщательно удалите все, что вам не нужно

В худшем случае вы удаляете все свои розетки и просто подключаете их снова. Дело решено!


0

Как уже упоминалось, и руководствуясь ответом @ BadCat , я проследил за шагами и еще одним шагом, который я осмелился сделать!

Шаги для выполнения после последнего шага ответа BadCats:

Шаг 1:

Я выбрал ограничение в Интерфейсном Разработчике и затем помнил, для чего оно предназначено, а затем удалил его.

Шаг 2

Создайте проект XCode, и он покажет, что количество предупреждений может быть увеличено. Это потому, что вы удалили ограничение, которое должно быть хорошо скомпилировано. Итак, перейдите к третьему шагу!

Шаг 3

Повторно добавьте ограничение, которое вы имели в виду (то, которое вы удалили). А потом заново его построить!

Для меня предупреждения ушли, просто сделав это! Я думаю, это сработает для некоторых людей!

Причина:

Как я мог понять, проблема, вызвавшая это предупреждение, заключалась в том, что у меня был ярлык, связанный с IBOutlet, но его имя начиналось с заглавной буквы. Поэтому я переименовал его с помощью простого письма в ViewController и пришел, чтобы изменить его в IB. Я удалил прошлый IBOutlet и пошел, чтобы соединить его с недавно переименованным именем свойства и соединился. Затем я заметил, что появилось новое предупреждение.

Сначала я тоже попробовал следующий ответ в этой теме, но это не помогло!

Ура!


0

Мой случай - выбрать метку, затем нажать control + X, она будет отключена, но я ничего с этим не делаю. Когда я соберу, он покажет предупреждение. Решение: удалить ярлык или удалить выбранный элемент управления + X для ярлыка.


0

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


0

У меня была проблема с представлением стека. Удаление ограничений и их повторное добавление не помогло. Очистка и восстановление не помогли.

Для меня решением было создать совершенно новый объект стекового вида.

Затем переместите все элементы из старого представления стека в новое представление стека.

Удаление старого представления стека устранило проблему.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.