it-swarm.com.ru

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

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

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

enter image description here

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

 enter image description here

138
Zhihao Yang

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

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

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

Annoying warning

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

enter image description here

Шаг 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 ...

Хм ... что это ...?

interesting

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

search

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

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

wheeee


На 2016 год ...

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

 enter image description here

 enter image description here

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

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

На 2017 год ...

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

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

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

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

37
KPM

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

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

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

enter image description here

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

14
Zhihao Yang

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

 enter image description here

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

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

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

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

8
Dirk

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

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

constraint-warning

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

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

uninstalled-control

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

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

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

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

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

Log Navigator/Find Tool

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

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

log-navigator

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

6
Tommie C.

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

1
Ryde

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

1
Jano

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

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

 enter image description here

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

 enter image description here

1
Scooter

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

0
Duyen Hang Kim

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

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

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

0
Chuckles

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

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

Шаг 1:

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

Шаг 2

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

Шаг 3

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

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

Причина:

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

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

Ура!

0
Randika Vishman

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

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

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

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

0
George Filippakos

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

0
Old one