Avviso Xboard Storyboard: gli elementi di riferimento dei vincoli sono disattivati ​​nella configurazione corrente. Disattiva questo vincolo nella configurazione corrente


146

Questo avviso si verifica in Xcode 6.1. Qualcuno ha idee cosa significa questo avviso e cosa accadrà con esso? Grazie molto!

Di seguito è riportato uno screenshot con gli avvisi aperti nel codice sorgente "

inserisci qui la descrizione dell'immagine

Come trovare quale vincolo provoca l'avviso? Xcode non ti dice quale vincolo è il problema.

inserisci qui la descrizione dell'immagine


@wumm sì, l'app può essere costruita ed eseguita con successo, sono solo preoccupata che in qualche modo si verifichino alcuni problemi potenziali, che non ho ancora incontrato.
Zhihao Yang,

7
Si noti che in genere questo problema è causato da: si dispone di un elemento non installato, ma presenta vincoli che sono ancora installati. In generale, trova l'elemento non installato e, per tutti i suoi vincoli, contrassegnali come non installati.
Fattie,

@Fattie Modifica la risposta accettata con questo motivo principale. Grazie
Milano Kamilya,

Risposte:


431

Questo avviso può essere fastidioso e si verifica a partire da Xcode 6.1.1. Il problema principale è che non è possibile trovare facilmente il vincolo di riferimento facendo clic sull'avvertimento. Immagino che questo sia un bug e verrà risolto prima o poi.

Tuttavia, nel frattempo puoi usare questa piccola soluzione alternativa:

Passaggio 1: rileva fastidiosi avvisi 😱

Avviso fastidioso

Passaggio 2: destra / Ctrl-clic su avviso, selezionare Reveal in Log😨

inserisci qui la descrizione dell'immagine

Passaggio 3: Ammira la bellezza del seguente frammento di registro:

... 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 ... Cos'è questo ...?

interessante

Passaggio 4: lanciamolo nella barra di ricerca del progetto ... 😐

ricerca

Ep Sì, hai indovinato bene. Cliccalo.

Passaggio 5: 😁 OMG! Goditi qualche minuto in più di produttività finché Apple non risolve questo fastidioso bug. 😎

Wheeee


Per il 2016 ...

  • Se non riesci a ottenerlo con "Rivela nel registro", mostra il Navigatore dei rapporti. (Questa è la scheda più a destra nella colonna più a sinistra.) Approfondisci i risultati della build lì. Questo mostrerà il registro di build, incluso l'ID del vincolo. compilazione di cortesia completata

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

  • Nota che per Xcode del 5/2016, devi fastidiosamente uscire e riavviare Xcode per cancellare questo avviso in alcuni casi.

  • Nota che, in modo confuso, lo stesso errore può essere causato da un problema non correlato (questo sembra essere un bug Apple o uno scarso uso del linguaggio degli errori): se hai IBInspectableelementi e ti capita di rinominarli nei tuoi file Swift. Xcode non cancella per te il vecchio nome UserDefinedRuntimeAttributes. Basta fare clic su "Identity Inspector" (elemento 3 sul pannello di destra) ed eliminare gli elementi dud.

Per il 2017 ...

  • Ancora un'altra causa comune, e in effetti più semplice, del problema. Se ti è capitato di disinstallare un elemento: al momento della scrittura, molto semplicemente Xcode non sa disinstallare automaticamente anche tutti i vincoli che portano a quell'elemento . Molto semplicemente, guarda tutti gli elementi non installati e, per tutti i suoi vincoli, contrassegnali come non installati. (O semplicemente, forse cancella del tutto temporaneamente l'elemento non installato, per vedere se questo è il problema.)

28
Questa spiegazione è stata sorprendente. Grazie!
thomasmalt,

7
La mia risposta preferita della settimana :) E molto utile. Grazie!
ore

5
Penso che gli emoji dovrebbero essere richiesti nelle risposte da ora in poi.
James Webster,

3
Cosa succede se Reveal in Log è disattivato come nel mio caso?
Bakalolo,

6
Il mio clic destro -> Reveal Log non stava facendo nulla, quindi ho aperto i registri usando questo come ref: stackoverflow.com/questions/19014359/…
terrigenus

39

Questo messaggio viene attivato quando hai disattivato una vista nello storyboard, ma non hai disattivato i vincoli basati su tale vista.

Ad esempio, hai disattivato un pulsante, ma hai ancora alcuni vincoli collegati a quel pulsante. Può essere un vincolo intrinseco come altezza o larghezza o un vincolo relativo come la distanza da un'altra vista.

Devi disattivare ciascuno dei vincoli che fanno riferimento alla vista e devi farlo manualmente. Xcode è troppo conservativo qui e non lo farà per te.


4
Grazie per la risposta! Potresti renderlo più specifico che cosa è "vista non attiva"? Eliminare una vista (come un pulsante)? ma dal momento che l'ho già eliminato, il vincolo potrebbe anche essere eliminato e non è stato trovato? E come "disattivare il vincolo" in modo più dettagliato, basta selezionarlo ed eliminarlo? Grazie mille!
Zhihao Yang,

2
Se una vista non è contrassegnata come "Installata" in Interface Builder per la sua classe di dimensioni corrente, è disattivata.
DivideByZer0

Ho molti ViewController nel mio storyboard. Come faccio a sapere quale ha una subview non installata?
Jobima,

puoi fare clic destro sull'avvertimento e selezionare l'opzione "Codice sorgente". Lì dovresti vedere chiaramente la gerarchia della vista corrispondente nel rispettivo controller di vista.
ZaEeM ZaFaR

15

Questa soluzione funziona per me.

Poiché ho copiato diversi elementi del progetto che ho sviluppato in Xcode 5 in Xcode 6 e lo storyboard in Xcode 6 supporta più layout, per ogni vincolo, devo installarlo nella configurazione corrente.

Ad esempio, sto usando "Larghezza compatta | Altezza normale", per il vincolo che devo impostare come di seguito:

inserisci qui la descrizione dell'immagine

Dopo aver verificato e impostato tutte le centinaia di vincoli nei miei progetti, pulito e costruito, gli avvisi alla fine scompaiono.


1
Nota che ci sono anche quelle fastidiose Installedcaselle di controllo negli attributi dell'oggetto vista. Quindi assicurati che gli oggetti vista che ritieni vengano visualizzati abbiano la casella di controllo corretta selezionata. L'avviso ti dice che alcuni oggetti non vengono visualizzati in current configuration.
Matt,

Questo ha funzionato anche per me. XCode ha detto che avevo 12 o 13 avvisi, ma cercando nel registro uno di essi ha mostrato che ce ne erano almeno 100. Quindi ho esaminato ciascuno di essi, aggiungendo un wChR per ogni vincolo e quindi deselezionando il generico "Installato". Gli avvisi sono scomparsi!
Andreas,

Oh, ho dimenticato di menzionare. Mi sono reso conto a metà del fatto che puoi effettivamente eseguire questo processo per diversi vincoli contemporaneamente selezionandoli contemporaneamente.
Andreas,

8

Volevo solo aggiungere il mio caso come è successo questo errore per me: Nel mio caso, volevo eliminare un campo di testo con "Cmd + Backspace". L'ho fatto direttamente nella Vista ad albero di Scene-Builder:

inserisci qui la descrizione dell'immagine

Puoi vedere che il campo snooze è disattivato.

Quindi è stato facilmente scoperto per me. Puoi semplicemente eliminare il campo selezionando:

Modifica-Elimina dal menu

Sorprendentemente, questo elimina davvero il campo (compresi i vincoli). Forse questo aiuta qualcuno a trovare facilmente la causa di questo fastidioso avvertimento ...


Questo non risponde davvero alla domanda. Se hai una domanda diversa, puoi farla facendo clic su Poni domanda . Puoi anche aggiungere una taglia per attirare più attenzione a questa domanda una volta che hai abbastanza reputazione . - Dalla recensione
Martin Evans,

3
Questo è un altro modo in cui è possibile risolvere la domanda. Quindi volevo solo aggiungere questo per aiutare gli altri ...
Dirk,

Grazie, molto utile
Ahmed Elashker il

Questa risposta ha ristretto il modo di trovare e risolvere il problema. Ha funzionato per me!
Lance Samaria,

6

Spiegazione estesa

Niente di sbagliato con le altre risposte. Volevo solo attirare l'attenzione sul testo nel avvertimento originale e di individuare un paio di casi d'uso in cui questo può presentarsi in una sola di flusso di lavoro.

vincolo di allarme

Vincoli agli elementi di riferimento disattivati ​​nella configurazione corrente.

Ciò significa che alcuni elementi (in genere una vista di controllo o personalizzata normalmente visibile) a cui fanno riferimento uno o più vincoli sono disattivati ​​(disabilitati o la casella di controllo "installata" non è selezionata). Se ad esempio decidi di voler spostare un controllo o una vista nello storyboard al di fuori della vista principale (o potresti vedere a volte quando fai qualcosa di interessante nelle classi di dimensioni), potresti vedere questo avviso se il controllo ha vincoli ad esso associati .

disinstallato-control

Insieme alla soluzione consigliata:

Disattiva questo vincolo nella configurazione corrente.

Due approcci da risolvere

Schema del documento

Visivamente puoi aprire il contorno del documento nello storyboard e cercare i vincoli in grigio che fanno riferimento al tuo controllo / vista seduti fuori dalla vista principale (allarga il contorno, fai clic sul vincolo e visualizza la finestra di ispezione degli attributi, scorri verso il basso per rivedere velocemente) . Quindi rimuovere il vincolo da questo contesto (classe di dimensione). Ad esempio, nel mio caso sto solo tenendo il controllo finché non decido in seguito dove presentarlo, quindi ho scelto di eliminare completamente il vincolo offensivo fino a dopo. Ma in una classe di dimensioni vorrei semplicemente disinstallare il vincolo dal contesto corrente usando la casella di controllo installata nella finestra di ispezione degli attributi.

Log Navigator / Trova strumento

Si può anche continuare a utilizzare Log Navigator per trovare il controllo del problema tramite l'identificatore univoco assegnato a ciascun oggetto sullo storyboard. Nel registro sarebbe appena prima del testo evidenziato in giallo e in genere assume la forma vista nel mio esempio sopra: jvj-mY-DHf

Usando l'identificatore si può quindi usare lo strumento trova in Xcode per localizzare ed eliminare (completamente) o disinstallare (per il contesto attuale) il vincolo offensivo.

log-navigator

Se sei appassionato di Xml e della sua semplicità, puoi anche aprire lo Storyboard come codice sorgente e trovare l'identificatore univoco offensivo ed eliminare il blocco appropriato di xml.


1

Uno dei motivi per cui ciò può accadere è perché hai selezionato una classe di dimensioni non compatibile con i tuoi vincoli ( wAny hAnyè un caso comune). In tal caso, basta selezionare una classe di dimensioni diverse in Interface Builder e il gioco è fatto.


1

Per me, succede se imposto a un oggetto un nuovo contrappunto su oggetto (non vista) con l'opzione "Vincolo ai margini" non selezionata. Problema risolto con spuntare l'opzione (che è di default).


1

Ciò che ha funzionato per me (e non ho idea del perché) è disattivare "Usa variazioni di tratto", quindi eseguire una pulizia, quindi riaccenderli. La build successiva non aveva avvertimenti.

Per disattivare "Usa varianti di tratto", seleziona lo storyboard nel Navigatore progetto, quindi seleziona Impostazioni file.

inserisci qui la descrizione dell'immagine

Quindi deseleziona "Usa variazioni di tratto", esegui la pulizia premendo Shift-CMD K, quindi riattiva le variazioni di tratto se desideri utilizzarle.

inserisci qui la descrizione dell'immagine


Non penso che questo sia "giusto" di per sé (i vincoli scompaiono), tuttavia questa risposta mi è stata utile perché non appena ho armeggiato con questo interruttore e poi ho ripristinato le modifiche all'ultimo commit, Xcode aggiornerebbe bene qualsiasi vecchio / errato / già corretti avvisi di questo tipo. Sembra che Xcode mostrerebbe avvisi vecchi, già corretti in realtà un sacco di volte - riavviare Xcode normalmente non mi aiuterebbe. Lanciando l'interruttore + ripristina sull'ultimo commit sembra mostrare il prossimo "vero" avvertimento di questo tipo; cliccandoci sopra selezionerebbe automaticamente il vincolo problematico in IB.
Jonny,

0

Ho pensato che fosse un vincolo persistente a causa dell'altra risposta, tuttavia era a causa di un 'outlet' che avevo ancora per un elemento che avevo eliminato prima. Cosa fare è:

  1. Seleziona il tuo ViewController
  2. Fai clic sull'icona "outlet" in alto a destra
  3. Guarda attraverso i punti vendita ed elimina con attenzione quelli che non ti servono

Nel peggiore dei casi, elimini tutti i punti vendita e li ricolleghi. Caso risolto!


0

Come detto e ben guidato risposta di @ BadCat , ho seguito i passaggi e solo un altro passo che ho osato fare!

Passaggi da eseguire dopo l'ultimo passaggio della risposta BadCats:

Passo 1:

Ho selezionato il vincolo in Interface Builder e poi ho tenuto a mente quello per cui è stato, quindi l'ho eliminato.

Passo 2

Costruisci il progetto XCode e mostrerà che potresti aumentare il numero di avvisi. Questo perché hai eliminato un vincolo che deve essere compilato bene. Quindi, vai al 3 ° passaggio!

Passaggio 3

Aggiungi nuovamente il vincolo che hai tenuto presente (quello che hai eliminato). E poi ricostruiscilo di nuovo!

Per me gli avvertimenti sono spariti semplicemente facendo questo! Immagino che questo funzionerà per alcune persone!

Causa:

Poiché potevo capire il problema che causava questo avviso, avevo un'etichetta collegata a un IBOutlet, ma il suo nome iniziava con una lettera maiuscola. Così l'ho rinominato con una semplice lettera nel ViewController e sono arrivato a cambiarlo nell'IB. Ho rimosso IBOutlet e sono andato a collegarlo al nome della proprietà appena rinominato e connesso. Poi ho notato che è arrivato un nuovo avvertimento.

Prima ho provato la seguente risposta in questo thread, ma non ha aiutato!

Saluti!


0

Il mio caso è scegliere etichetta, quindi fare clic control + X, sarà disabilitato, ma non ci faccio nulla. Quando costruisco, mostrerà un avvertimento. Soluzione: rimuovere l'etichetta o rimuovere il controllo scelto + X per l'etichetta.


0

Elimina tutti quegli elementi dell'interfaccia utente inclusi i loro vincoli e li aggiungo di nuovo tutti, quegli avvisi scompaiono. Comunque questo è un modo peggiore ma utile per risolverlo.


0

Ho avuto il problema in una vista pila. Eliminare i vincoli e aggiungerli di nuovo non ha aiutato. La pulizia e la ricostruzione non hanno aiutato.

Per me, la soluzione era quella di creare un oggetto vista stack completamente nuovo.

Quindi sposta tutti gli elementi dalla vecchia vista dello stack nella nuova vista dello stack.

L'eliminazione della vista stack precedente ha risolto il problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.