Ostrzeżenie dotyczące Xcode Storyboard: Ograniczenie odwołujące się do elementów wyłączone w bieżącej konfiguracji. Wyłącz to ograniczenie w bieżącej konfiguracji

146

To ostrzeżenie występuje w Xcode 6.1. Czy ktoś ma pomysł, co oznacza to ostrzeżenie i co się z nim stanie? Wielkie dzięki!

Poniżej znajduje się zrzut ekranu z ostrzeżeniami otwartymi w kodzie źródłowym "

wprowadź opis obrazu tutaj

Jak sprawdzić, które ograniczenie powoduje ostrzeżenie? Xcode nie informuje, które ograniczenie jest przyczyną problemu.

wprowadź opis obrazu tutaj

Zhihao Yang
źródło
@wumm tak, aplikację można pomyślnie zbudować i uruchomić, martwię się tylko, że może się jakoś wydarzyć jakiś potencjalny problem, którego jeszcze nie spotkałem.
Zhihao Yang
7
Zauważ, że ogólnie ten problem jest spowodowany przez: masz element, który nie jest zainstalowany, ale ma ograniczenia, które są nadal zainstalowane. Ogólnie rzecz biorąc, znajdź niezainstalowany element i dla wszystkich jego ograniczeń oznacz go jako niezainstalowany.
Fattie
@Fattie Edytuj zaakceptowaną odpowiedź, podając ten główny powód. Dzięki
Milan Kamilya

Odpowiedzi:

431

To ostrzeżenie może być denerwujące i występuje od wersji Xcode 6.1.1. Główny problem polega na tym, że nie można łatwo znaleźć powiązanego ograniczenia, klikając ostrzeżenie. Myślę, że jest to błąd i prędzej czy później zostanie naprawiony.

Jednak w międzyczasie możesz skorzystać z tego małego obejścia:

Krok 1: Wykryj irytujące ostrzeżenie 😱

Irytujące ostrzeżenie

Krok 2: Kliknij prawym przyciskiem Reveal in Logmyszy / Ctrl-Kliknij ostrzeżenie, wybierz 😨

wprowadź opis obrazu tutaj

Krok 3: Podziwiaj piękno następującego fragmentu dziennika:

... 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 ...

Hmmm ... Co to jest ...?

ciekawy

Krok 4: Wrzućmy to do paska wyszukiwania projektu ... 😐

Szukaj

😮 Tak, zgadłeś. Kliknij to.

Krok 5: 😁 OMG! Ciesz się kilkoma dodatkowymi minutami produktywności, dopóki Apple nie naprawi tego irytującego błędu. 😎

wheeee


Na rok 2016 ...

  • Jeśli nie możesz go uzyskać za pomocą opcji „Pokaż w dzienniku”, pokaż Nawigator raportów. (Jest to karta znajdująca się najbardziej na prawo w kolumnie z lewej strony). Przejdź do wyników kompilacji. Spowoduje to wyświetlenie dziennika kompilacji, w tym identyfikatora ograniczenia. dzięki uprzejmości kompilacja powiodła się

wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj

  • Zwróć uwagę, że w przypadku Xcode z 5/2016 irytująco musisz zamknąć i ponownie uruchomić Xcode, aby w niektórych przypadkach usunąć to ostrzeżenie.

  • Zauważ, że myląco ten sam błąd może być spowodowany przez niepowiązany problem (wydaje się, że jest to błąd Apple lub słabe użycie języka błędów): jeśli masz IBInspectableelementy i zdarza się, że zmieniasz ich nazwy w plikach Swift. Xcode nie usuwa starej nazwy UserDefinedRuntimeAttributes za Ciebie. Po prostu kliknij „Identity Inspector” (pozycja 3 na prawym panelu) i usuń niewypełnione elementy.

Na rok 2017 ...

  • Jest to jeszcze jedna powszechna i rzeczywiście prostsza przyczyna problemu. Jeśli zdarzyło Ci się odinstalować element: w chwili pisania tego tekstu po prostu Xcode nie wie, aby automatycznie odinstalować również wszelkie ograniczenia, które prowadzą do tego elementu . Po prostu spójrz na wszystkie niezainstalowane elementy i dla wszystkich jego ograniczeń, po prostu oznacz je jako niezainstalowane. (Lub po prostu tymczasowo usuń całkowicie niezainstalowany element, aby sprawdzić, czy to jest problem).
BastiBen
źródło
28
To wyjaśnienie było niesamowite. Dziękuję Ci!
thomasmalt
7
Moja ulubiona odpowiedź tygodnia :) I bardzo przydatna. Dzięki!
godzin
5
Myślę, że od teraz emotikony powinny być wymagane w odpowiedziach.
James Webster
3
Co się stanie, jeśli Pokaż w dzienniku jest wyszarzone, tak jak w moim przypadku?
bakalolo
6
Moje prawe kliknięcie -> ujawnij dziennik nic nie robił, więc otworzyłem dzienniki, używając tego jako ref: stackoverflow.com/questions/19014359/ ...
terrigenus
39

Ten komunikat jest wyzwalany, gdy dezaktywujesz widok w swojej serii ujęć, ale nie dezaktywujesz ograniczeń opartych na tym widoku.

Na przykład dezaktywowałeś przycisk, ale nadal masz pewne ograniczenia powiązane z tym przyciskiem. Może to być wewnętrzne ograniczenie, takie jak wysokość lub szerokość, lub względne ograniczenie, takie jak odległość od innego widoku.

Musisz wyłączyć każde z ograniczeń odnoszących się do widoku i musisz to zrobić ręcznie. Xcode jest tutaj zbyt konserwatywny i nie zrobi tego za Ciebie.

KPM
źródło
4
Dziękuję za odpowiedź! Czy mógłbyś sprecyzować, czym jest „dezaktywacja widoku”? Czy ma to na celu usunięcie widoku (np. Przycisku)? ale skoro już je usunąłem, ograniczenie może również zostać usunięte i nie można go znaleźć? A jak bardziej szczegółowo „wyłączyć ograniczenie”, po prostu je zaznaczyć i usunąć? Dziękuję Ci bardzo!
Zhihao Yang
2
Jeśli widok nie jest oznaczony jako „Zainstalowany” w programie Interface Builder dla swojej bieżącej klasy rozmiaru, jest dezaktywowany.
DivideByZer0
W mojej serii ujęć mam wiele kontrolerów ViewControllers. ¿Skąd mam wiedzieć, który z nich ma niezainstalowany podgląd?
jobima
możesz kliknąć ostrzeżenie prawym przyciskiem myszy i wybrać opcję „Kod źródłowy”. Tam powinieneś wyraźnie zobaczyć hierarchię odpowiedniego widoku w szanowanym kontrolerze widoku.
ZaEeM ZaFaR
15

To rozwiązanie działa na mnie.

Ponieważ skopiowałem kilka elementów z projektu, który opracowałem w Xcode 5 do Xcode 6, a storyboard w Xcode 6 obsługuje wiele układów, dla każdego ograniczenia muszę go zainstalować w bieżącej konfiguracji.

Na przykład używam opcji „Kompaktowa szerokość | Regularna wysokość”, dla ograniczenia, które muszę ustawić, jak poniżej:

wprowadź opis obrazu tutaj

Po sprawdzeniu i ustawieniu wszystkich setek ograniczeń w moich projektach, wyczyszczeniu i zbudowaniu, ostrzeżenia w końcu znikają.

Zhihao Yang
źródło
1
Zauważ, że Installedw atrybutach obiektu widoku są również te nieznośne pola wyboru. Dlatego upewnij się, że obiekty widoku, które Twoim zdaniem są wyświetlane, mają zaznaczone odpowiednie pole wyboru. Ostrzeżenie informuje, że niektóre obiekty nie są wyświetlane w current configuration.
Matt
U mnie to też zadziałało. XCode powiedział, że mam 12 lub 13 ostrzeżeń, ale szukanie w dzienniku jednego z nich pokazało, że było ich co najmniej 100. Przejrzałem więc każde z nich, dodając wChR dla każdego ograniczenia, a następnie odznaczając ogólne „Zainstalowane”. Ostrzeżenia zniknęły!
Andreas
Och, zapomniałem wspomnieć. Mniej więcej w połowie zdałem sobie sprawę, że możesz faktycznie wykonać ten proces dla kilku ograniczeń naraz, wybierając je w tym samym czasie.
Andreas
8

Chciałem tylko dodać moją sprawę, w jaki sposób ten błąd się wydarzył: w moim przypadku chciałem usunąć pole tekstowe za pomocą „Cmd + Backspace”. Zrobiłem to bezpośrednio w widoku drzewa programu Scene-Builder:

wprowadź opis obrazu tutaj

Jak widać, pole drzemki jest wyszarzone.

Więc było to dla mnie łatwe do odkrycia. Możesz po prostu naprawdę usunąć pole, wybierając:

Edycja-Usuń z menu

Zaskakujące - to naprawdę usuwa pole (w tym ograniczenia). Może to pomoże komuś łatwo znaleźć przyczynę tego irytującego Ostrzeżenia ...

Sztylet
źródło
To naprawdę nie odpowiada na pytanie. Jeśli masz inne pytanie, możesz je zadać, klikając Zadaj pytanie . Możesz także dodać nagrodę, aby zwrócić większą uwagę na to pytanie, gdy zdobędziesz wystarczającą reputację . - Z recenzji
Martin Evans,
3
To kolejny sposób na naprawienie zadanego pytania. Więc po prostu chciałem to dodać, aby pomóc innym ...
Dirk
Dzięki, bardzo pomocne
Ahmed Elashker
Ta odpowiedź zawęziła sposób znalezienia i rozwiązania problemu. U mnie zadziałało!
Lance Samaria
6

Rozszerzone wyjaśnienie

Nie ma nic złego w innych odpowiedziach. Chciałem tylko zwrócić uwagę na sformułowanie w oryginalnym ostrzeżeniu i zidentyfikować kilka przypadków użycia, w których może to pojawić się w przepływie pracy.

ostrzeżenie o ograniczeniach

Wiązanie odwołujące się do elementów wyłączone w bieżącej konfiguracji.

Oznacza to, że jakiś element (zwykle kontrolka lub widok niestandardowy, który jest normalnie widoczny), do którego odwołuje się jedno lub więcej ograniczeń, jest wyłączony (wyłączony lub ma niezaznaczone pole wyboru „zainstalowane”). Jeśli na przykład zdecydujesz, że chcesz przenieść kontrolkę lub widok w swoim storyboardzie poza widok główny (lub czasami możesz zobaczyć, robiąc coś interesującego w klasach wielkości), możesz zobaczyć to ostrzeżenie, jeśli kontrolka ma dołączone do niej ograniczenia .

odinstalowana-kontrola

Wraz z zalecanym rozwiązaniem:

Wyłącz to ograniczenie w bieżącej konfiguracji.

Dwa podejścia do naprawy

Zarys dokumentu

Wizualnie możesz otworzyć konspekt dokumentu w swoim scenorysie i poszukać wyszarzonych wiązań, które odnoszą się do twojego elementu sterującego / widoku poza głównym widokiem (poszerz kontur, kliknij ograniczenie i wyświetl inspektora atrybutów, przesuń mysz w dół, aby szybko przejrzeć) . Następnie usuń ograniczenie z tego kontekstu (klasa wielkości). Na przykład w moim przypadku po prostu trzymam kontrolę, dopóki nie zdecyduję, gdzie ją zaprezentować, więc zdecydowałem się całkowicie usunąć obrażające ograniczenie na później. Ale w klasie wielkości po prostu odinstalowałbym ograniczenie z bieżącego kontekstu za pomocą zainstalowanego pola wyboru w inspektorze atrybutów.

Log Navigator / Find Tool

Można również nadal używać nawigatora dziennika, aby znaleźć kontrolę problemu za pomocą unikalnego identyfikatora nadanego każdemu obiektowi w serii ujęć. W dzienniku byłoby to tuż przed zaznaczonym na żółto tekstem i zwykle przyjmuje postać, jak widać w moim przykładzie powyżej: jvj-mY-DHf

Korzystając z identyfikatora, można następnie użyć narzędzia wyszukiwania w Xcode, aby zlokalizować i usunąć (całkowicie) lub odinstalować (dla bieżącego kontekstu) naruszające ograniczenie.

nawigator dziennika

Jeśli lubisz XML i jego prostotę, możesz po prostu otworzyć Storyboard jako kod źródłowy i znaleźć naruszający unikalny identyfikator i usunąć odpowiedni blok xml.

Tommie C.
źródło
1

Jednym z powodów, dla których może się to zdarzyć, jest wybranie klasy rozmiaru niezgodnej z Twoimi ograniczeniami ( wAny hAnyjest to częsty przypadek). W takim przypadku po prostu wybierz inną klasę rozmiaru w Interface Builder i gotowe.

Jano
źródło
1

U mnie dzieje się tak, gdy ustawię dla obiektu nowe ograniczenie do obiektu (nie widoku) bez zaznaczonej opcji „Ograniczenie do marginesów”. Problem rozwiązany przez zaznaczenie opcji (która jest domyślna).

Ryde
źródło
1

To, co zadziałało dla mnie (i nie mam pojęcia dlaczego), to wyłączyć „Użyj wariacji cech”, a następnie przeprowadzić czyszczenie, a następnie włączyć je ponownie. Następna kompilacja nie miała żadnych ostrzeżeń.

Aby wyłączyć opcję „Użyj odmian cech”, po prostu wybierz scenorys w Nawigatorze projektu, a następnie wybierz Inspektor plików.

wprowadź opis obrazu tutaj

Następnie po prostu odznacz „Użyj wariacji cech”, wykonaj czyszczenie, naciskając Shift-CMD K, a następnie włącz ponownie wariacje cech, jeśli chcesz ich użyć.

wprowadź opis obrazu tutaj

Skuter
źródło
Nie wydaje mi się, żeby to było „właściwe” per se (ograniczenia znikają), jednak ta odpowiedź była dla mnie pomocna, ponieważ jak tylko bawiłem się tym przełącznikiem, a potem przywróciłem zmiany do ostatniego zatwierdzenia, Xcode ładnie zaktualizowałby wszystkie stare / niepoprawne / naprawiono już ostrzeżenia tego rodzaju. Wygląda na to, że Xcode często pokazywałby stare, już naprawione ostrzeżenia - ponowne uruchomienie Xcode normalnie by mi nie pomogło. Odwrócenie tego przełącznika + przywrócenie do ostatniego zatwierdzenia wydaje się pokazywać następne „prawdziwe” ostrzeżenie tego rodzaju; kliknięcie na to automatycznie wybierze problematyczne ograniczenie w IB.
Jonny
0

Myślałem, że to utrzymujące się ograniczenie z powodu innej odpowiedzi, jednak było to spowodowane „gniazdem”, które nadal miałem dla elementu, który wcześniej usunąłem. Co należy zrobić:

  1. Wybierz kontroler ViewController
  2. Kliknij ikonę „outlet” w prawym górnym rogu
  3. Przejrzyj swoje punkty sprzedaży i ostrożnie usuń te, których nie potrzebujesz

W najgorszym przypadku usuwasz wszystkie gniazdka i po prostu podłączasz je ponownie. Sprawa została rozwiązana!

Chichocze
źródło
0

Jak wspomniano i dobrze kierowałem się odpowiedzią @ BadCat , poszedłem w dół i tylko jeden krok, który odważyłem się zrobić!

Kroki do wykonania po ostatnim kroku odpowiedzi BadCats:

Krok 1:

Wybrałem ograniczenie w programie Interface Builder, pamiętając o tym, do czego ono służy, a następnie je usunąłem.

Krok 2

Zbuduj projekt XCode i pokaże, że liczba ostrzeżeń może zostać zwiększona. Dzieje się tak, ponieważ usunąłeś ograniczenie, które musi się dobrze skompilować. Więc przejdź do 3 kroku!

Krok 3

Ponownie dodaj ograniczenie, o którym pamiętałeś (to, które usunąłeś). A potem odbuduj go ponownie!

Dla mnie ostrzeżenia zniknęły, robiąc to! Myślę, że to zadziała dla niektórych ludzi!

Przyczyna:

Ponieważ mogłem zrozumieć, że problem spowodowany tym ostrzeżeniem był taki, że miałem etykietę podłączoną do IBOutlet, ale jej nazwa zaczynała się wielką literą. Więc zmieniłem jego nazwę za pomocą prostej litery w ViewController i przyszedłem zmienić to w IB. Usunąłem poprzedni IBOutlet i poszedłem połączyć go z nowo zmienioną nazwą właściwości i podłączyłem. Wtedy zauważyłem, że pojawiło się nowe ostrzeżenie.

Najpierw spróbowałem następującej odpowiedzi w tym wątku, ale to nie pomogło!

Twoje zdrowie!

Randika Vishman
źródło
0

Mój przypadek to wybierz etykietę, a następnie kliknij control + X, zostanie wyłączony, ale nic z tym nie robię. Kiedy buduję, pokaże ostrzeżenie. Rozwiązanie: usuń etykietę lub usuń wybraną kontrolkę + X dla etykiety.

Duyen Hang Kim
źródło
0

Usuwam wszystkie te elementy interfejsu użytkownika, w tym ich ograniczenia, i dodaję je wszystkie ponownie, te ostrzeżenia po prostu znikają. W każdym razie jest to najgorszy, ale użyteczny sposób rozwiązania tego problemu.

Stary
źródło
0

Miałem problem na widoku stosu. Usunięcie ograniczeń i ponowne ich dodanie nie pomogło. Czyszczenie i odbudowa nie pomogły.

Dla mnie rozwiązaniem było utworzenie zupełnie nowego obiektu widoku stosu.

Następnie przenieś wszystkie elementy ze starego widoku stosu do nowego widoku stosu.

Usunięcie starego widoku stosu rozwiązało problem.

George Filippakos
źródło