Попередження попередження аркуша Xcode: елементи, що посилаються на обмеження, відключені в поточній конфігурації. Вимкніть це обмеження в поточній конфігурації


146

Це попередження відбувається в Xcode 6.1. У когось є ідеї, що означає це попередження і що з ним буде? Велике дякую!

Нижче - скріншот із попередженнями, відкритими у вихідному коді "

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

Як знайти, яке обмеження викликає попередження? Xcode не говорить вам, яке обмеження є проблемою.

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


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

7
Зауважте, що в цілому ця проблема викликана: у вас є елемент, який не встановлений, але він має обмеження, які все ще встановлені. Загалом, знайдіть невстановлений елемент і, попри всі його обмеження, позначте його як не встановлений.
Fattie

@Fattie Будь ласка, відредагуйте прийняту відповідь з цієї основної причини. Спасибі
Мілан Камілія

Відповіді:


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: 😁 OMG! Насолоджуйтесь декількома додатковими хвилинами продуктивності, поки Apple не виправить цю надокучливу помилку. 😎

хрип


За 2016 рік ...

  • Якщо ви не можете отримати це за допомогою "Означити журнал", покажіть Навігатор звітів. (Це найправіша вкладка в крайньому лівому стовпчику.) Поглиблення в результати збірки там. Це покаже журнал збірки, включаючи ідентифікатор обмеження. ввічливість вдосконалена

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

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

  • Зауважте, що для Xcode від 5/2016, набридливо вам доведеться кинути і перезапустити Xcode, щоб очистити це попередження в деяких випадках.

  • Зауважте, що однаково помилка може бути спричинена непов'язаною проблемою (це, здається, помилка Apple або неправильне використання мови помилок): якщо у вас є IBInspectableелементи, і трапляється перейменувати їх у ваші файли Swift. Xcode не видаляє стару назву UserDefinedRuntimeAttributes для вас. Просто натисніть на "Інспектор посвідчення особи" (пункт 3 на правій панелі) та видаліть пункти "dud".

На 2017 рік ...

  • Ще одна поширена і справді простіша причина проблеми. Якщо ви випадково видалили елемент: Написавши, дуже просто Xcode не знає автоматично також видалити будь-які обмеження, які призводять до цього елемента . Попросту, подивіться на будь-які невстановлені елементи, а для всіх його обмежень просто позначте їх як не встановлені. (Або просто, можливо, просто тимчасово видаліть невстановлений елемент, щоб побачити, чи це проблема.)

28
Це пояснення було дивовижним. Дякую!
thomasmalt

7
Моя улюблена відповідь тижня :) І дуже корисна. Дякую!
годин

5
Я думаю, що відтепер у відповідях потрібно вимагати емоції.
Джеймс Вебстер

3
Що робити, якщо функція Reveal in Log затьмарена, як у моєму випадку?
bakalolo

6
Мій Клацання правою кнопкою миші -> Reveal Log нічого не робив , так що я відкрив журнали , використовуючи це як вих: stackoverflow.com/questions/19014359 / ...
terrigenus

39

Це повідомлення ініціюється, коли ви деактивували перегляд на своїй дошці розкадрування, але не деактивували обмеження, засновані на цьому поданні.

Наприклад, ви дезактивували кнопку, але у вас все ще є деякі обмеження, пов’язані з цією кнопкою. Це може бути внутрішнє обмеження, як висота чи ширина, або відносне обмеження, як відстань від іншого виду.

Ви повинні вимкнути кожне з обмежень, що посилаються на вигляд, і це потрібно зробити вручну. Xcode тут надмірно консервативний, і не зробить це за вас.


4
Дякую за вашу відповідь! Не могли б ви зробити більш конкретним, що таке "диктативний погляд"? Чи потрібно видалити подання (як кнопку)? але оскільки я його вже видалив, обмеження може бути видалено і його не вдалося знайти? І як детальніше "вимкнути обмеження", просто вибрати та видалити його? Велике спасибі!
Чжіхао Ян

2
Якщо подання не позначено як "Встановлено" в "Інтерфейс Builder" для його поточного класу розмірів, його вимкнено.
DivideByZer0

У моїй розгортці є багато ViewControllers. ¿Як дізнатись, у кого з них не встановлений підвід?
jobima

ви можете натиснути правою кнопкою миші на попередження та вибрати опцію "Вихідний код". Там ви повинні чітко бачити ієрархію відповідного виду у шанованому контролері перегляду.
ZaEeM ZaFaR

15

Це рішення працює для мене.

Оскільки я скопіював декілька елементів із проекту, який я розробив у Xcode 5, у Xcode 6, а аркуш розкадрування в Xcode 6 підтримує декілька макетів, для кожного обмеження мені потрібно встановити його в поточній конфігурації.

Наприклад, я використовую "Компактна ширина | Регулярна висота", для обмеження, яке мені потрібно встановити як нижче:

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

Після того, як я перевірив і встановив усі сотні обмежень у своїх проектах, очистив і наробив, попередження остаточно зникають.


1
Зверніть увагу, що Installedв атрибутах об'єкта перегляду є також такі сумні прапорці. Тому переконайтесь, що об’єкти перегляду, які, на вашу думку, відображаються, мають правильний прапорець. Попередження говорить про те, що деякі об'єкти не відображаються в current configuration.
Метт

Це працювало і для мене. XCode сказав, що я маю 12 або 13 попереджень, але, переглядаючи журнал для одного з них, показав, що принаймні 100. Тому я пройшов кожне з них, додавши wChR для кожного обмеження, а потім зняв прапорець із загальним "Установленим". Попередження зникли!
Андреас

О, забув згадати. Я зрозумів приблизно на півдорозі, що ви можете реально виконати цей процес за декілька обмежень одночасно, вибравши їх одночасно.
Андреас

8

Просто хотів додати свій випадок, як ця помилка сталася зі мною: у моєму випадку я хотів видалити Textfield із "Cmd + Backspace". Я зробив це безпосередньо в Дерево-вигляд дерева-сценариста:

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

Ви можете бачити, що Поле запізнілого відтінку посивіло.

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

Правка - Видалення з меню

Дивно - це дійсно видаляє поле (включаючи обмеження). Можливо, це допомагає комусь легко знайти причину цього дратівливого попередження ...


Це насправді не відповідає на питання. Якщо у вас інше питання, ви можете задати його, натиснувши Задати питання . Ви також можете додати щедрості, щоб привернути більше уваги до цього питання, як тільки у вас буде достатня репутація . - З огляду
Мартін Еванс

3
Це ще один спосіб вирішення заданого питання. Тому просто хотів додати це, щоб допомогти іншим ...
Дірк

Дякую, дуже корисно
Ахмед Елашкер

Це відповіло звузило, як знайти та виправити проблему. Це працювало для мене!
Lance Samaria

6

Розширене пояснення

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

обмеження-попередження

Елементи, що посилаються на обмеження, вимкнено в поточній конфігурації.

Це означає, що якийсь елемент (як правило, вигляд елемента керування або користувальницький звичайний вигляд), на який посилається одне або більше обмежень, вимкнено (вимкнено або встановлений прапорець "встановлений" не встановлений). Якщо ви, наприклад, вирішили, що хочете перемістити елемент керування чи перегляд у своїй дошці розкадрувань поза основним вікном (або ви можете бачити іноді, коли робите щось цікаве в класах розмірів), ви можете побачити це попередження, якщо до цього елемента додаються обмеження. .

видалення-контроль

Поряд з рекомендованим рішенням:

Вимкніть це обмеження в поточній конфігурації.

Два підходи до виправлення

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

Візуально ви можете відкрити контур документа на вашій дошці та шукати обмежені обмеження, які посилаються на ваш керування / перегляд, сидячи поза основним видом (розширити контур, натиснути обмеження та переглянути атрибути інспектора, миша вниз, щоб швидко переглянути) . Потім видаліть обмеження з цього контексту (клас розмірів). Наприклад, у моєму випадку я просто тримаю контроль, доки не вирішу пізніше, де його подати, тому я вирішив видалити цілком обмежуючі обмеження до пізніше. Але в класі розміру я би просто видалив обмеження з поточного контексту, використовуючи встановлений прапорець в інспекторі атрибутів.

Навігатор / Інструмент пошуку

Можна також продовжувати використовувати Навігатор журналу для пошуку проблеми управління через унікальний ідентифікатор, що надається кожному об'єкту на дошці розкадрування. У журналі це буде безпосередньо перед виділеним жовтим текстом і зазвичай приймає форму, як видно з мого прикладу вище: jvj-mY-DHf

За допомогою ідентифікатора потім можна використовувати інструмент пошуку в Xcode для пошуку та видалення (повністю) або видалення (для поточного контексту) обмеження, що порушує право.

log-навігатор

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


1

Однією з причин цього могло статися те, що ви вибрали клас розмірів, не сумісний із вашими обмеженнями ( wAny hAnyце звичайний випадок). У такому випадку просто виберіть інший розмірний клас у Interface Builder, і ви закінчите.


1

Для мене це трапляється, якщо я встановив об'єкт новий контракт на об'єкт (не перегляд) з опцією "Обмеження до меж", не поставленої галочкою. Проблема вирішена за допомогою галочки (яка за замовчуванням).


1

Те, що працювало для мене (і я не маю уявлення, чому), - вимкнути "Використовувати зміни ознак", потім виконати чистку, а потім увімкнути їх. Наступна збірка не мала попереджень.

Щоб вимкнути функцію "Використовувати зміни ознак", просто виберіть дошку навігації у "Навігаторі проектів", а потім виберіть "Інспектор файлів".

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

Потім просто зніміть прапорець "Використовувати варіанти ознак", виконайте очищення, натиснувши Shift-CMD K, а потім знову ввімкніть варіанти ознак, якщо ви хочете їх використовувати.

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


Я не думаю, що це "правильно" саме по собі (обмеження зникають), однак ця відповідь була для мене корисною, оскільки щойно я познайомився з цим перемикачем, а потім повернув зміни до останнього фіксації, Xcode міг би оновити будь-яку стару / неправильну / вже виправлені попередження подібного роду. Здається, що Xcode показував би старі, вже виправлені попередження, фактично багато разів - перезапуск Xcode зазвичай не допоможе мені. Переміщення цього перемикача + відновлення до останнього фіксації, схоже, показує наступне "реальне" попередження такого типу; натискання на нього автоматично вибирає проблемне обмеження в ІБ.
Джонні

0

Я подумав, що це постійне обмеження через іншу відповідь, однак це було через «розетку», яку я все-таки мав для предмета, який я раніше видалив. Що робити:

  1. Виберіть свій ViewController
  2. Клацніть на піктограму "розетка" у верхньому правому куті
  3. Перегляньте свої торгові точки і обережно видаліть все, що вам не потрібно

Найгірший сценарій - ви видалите всі торгові точки і просто підключите їх знову. Справа вирішена!


0

Як уже згадувалося та добре керувався у відповіді @ BadCat , я пішов по кроках і ще один крок я наважився зробити!

Кроки щодо виконання після останнього кроку BadCats відповідають:

Крок 1:

Я вибрав обмеження в програмі Interface Builder, а потім пам’ятаючи, для чого це, а потім видалив його.

Крок 2

Створіть проект XCode, і він покаже, що може бути кількість попереджень збільшена. Це тому, що ви видалили обмеження, яке потрібно добре скомпілювати. Отже, переходьте до 3-го кроку!

Крок 3

Повторно додайте обмеження, яке ви пам’ятали (те, яке ви видалили). А потім знову його будуйте!

Для мене застереження минули саме цим! Я думаю, що це вийде для деяких людей!

Причина:

Як я міг зрозуміти проблему, яка викликала це попередження, у мене був ярлик, підключений до IBOutlet, але його назва починалася з великої літери. Тож я перейменував його простим листом у ViewController і прийшов змінити його в ІБ. Я видалив минулий IBOutlet і пішов підключити його до нещодавно перейменованого імені властивості та підключити. Тоді я помітив, що з’являється нове попередження.

Спочатку я спробував наступну відповідь у цій темі, але це не допомогло!

Ура!


0

У моєму випадку виберіть ярлик, потім натисніть клавішу управління + X, це буде відключено, але я нічого не роблю з цим. Коли я будую, він покаже попередження. Рішення: видаліть мітку або видаліть вибраний елемент керування + X для мітки.


0

Я видаляю всі ці елементи інтерфейсу, включаючи їх обмеження, і додаю їх знову, ці попередження просто зникають. У будь-якому випадку це найгірший, але корисний спосіб вирішити це.


0

У мене виникла проблема з видом стека. Видалення обмежень та повторне додавання їх не допомогло. Чистка та відбудова не допомогли.

Для мене рішенням було створити абсолютно новий об’єкт перегляду стека.

Потім перемістіть усі елементи зі старого виду стека в новий вид стека.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.