Xcode Storyboard uyarısı: Mevcut yapılandırmada kısıt referans öğeleri kapatıldı. Mevcut yapılandırmada bu kısıtlamayı kapatın


147

Bu uyarı Xcode 6.1'de gerçekleşir. Bu uyarının ne anlama geldiği ve bununla ne olacağı hakkında fikri olan var mı? Çok teşekkürler!

Aşağıda, kaynak kodda açılan uyarıları içeren bir ekran görüntüsü bulunmaktadır "

görüntü açıklamasını buraya girin

Hangi kısıtlamanın uyarıya neden olduğunu nasıl bulabilirim? Xcode, hangi kısıtlamanın sorun olduğunu size söylemez.

görüntü açıklamasını buraya girin


@wumm evet, uygulama başarıyla oluşturulabilir ve çalıştırılabilir, henüz karşılaşmadığım bazı olası sorunların bir şekilde meydana gelebileceğinden endişeleniyorum.
Zhihao Yang

7
Bu sorunun genel olarak şu nedenlerden kaynaklandığına dikkat edin: Yüklenmemiş bir öğeniz var, ancak hala yüklü olan kısıtlamaları var. Genel olarak, Yüklenmemiş öğeyi bulun ve tüm kısıtlamaları için Yüklenmemiş olarak işaretleyin.
Şişko

@Fattie Lütfen kabul edilen cevabı bu ana sebeple düzenleyin. Teşekkürler
Milan Kamilya

Yanıtlar:


434

Bu uyarı can sıkıcı olabilir ve Xcode 6.1.1'den itibaren gerçekleşir. Ana sorun, uyarıya tıklayarak referans verilen kısıtlamayı kolayca bulamamanızdır. Sanırım bu bir hata ve er ya da geç düzeltilecek.

Bununla birlikte, bu arada şu küçük geçici çözümü kullanabilirsiniz:

Adım 1: Can sıkıcı uyarıyı tespit edin 😱

Can sıkıcı uyarı

Adım 2: Sağ / Ctrl-Uyarı üzerine tıklayın, Reveal in Log😨 öğesini seçin

görüntü açıklamasını buraya girin

3. Adım: Aşağıdaki günlük snippet'inin güzelliğine hayran kalın:

... 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 ... Bu nedir ...?

ilginç

Adım 4: Bunu proje arama çubuğuna atalım ... 😐

arama

😮 Evet, doğru tahmin ettin. Tıkla.

Adım 5: 😁 OMG! Apple bu can sıkıcı hatayı düzeltene kadar fazladan birkaç dakikalık üretkenliğin keyfini çıkarın. 😎

wheeee


2016 için ...

  • 'Günlükte Göster' ile elde edemezseniz, Rapor Gezgini'ni gösterin. (Bu, en soldaki sütundaki en sağdaki sekmedir.) Buradaki yapı sonuçlarını inceleyin. Bu, kısıtlama kimliği dahil olmak üzere derleme günlüğünü gösterecektir. nezaket yapısı başarılı

görüntü açıklamasını buraya girin

görüntü açıklamasını buraya girin

  • 5/2016 tarihli Xcode için can sıkıcı bir şekilde, bazı durumlarda bu uyarıyı temizlemek için Xcode'dan çıkıp yeniden başlatmanız gerektiğini unutmayın.

  • Kafa karıştırıcı bir şekilde, aynı hatanın ilgisiz bir sorundan kaynaklanabileceğini unutmayın (bu bir Apple hatası veya hata dilinin yetersiz kullanımı gibi görünür): eğer IBInspectableöğeleriniz varsa ve bunları Swift dosyalarınızda yeniden adlandırırsanız . Xcode yok değil sizin için eski adı UserDefinedRuntimeAttributes silin. "Identity Inspector" a (sağ paneldeki öğe 3) tıklayın ve sahte öğeleri silin.

2017 için ...

  • Sorunun bir başka yaygın ve aslında daha basit nedeni. Eğer bir şey olursa BM-Install bir öğeyi: As yazı, çok sade bir şekilde Xcode bu öğenin yol otomatik da kaldırma herhangi kısıtlamaları bilmiyor . Basitçe söylemek gerekirse, Yüklenmemiş öğelere bakın ve tüm kısıtlamaları için bunları Yüklenmemiş olarak işaretleyin. (Ya da basitçe, sorunun bu olup olmadığını görmek için belki de Yüklenmemiş öğeyi geçici olarak tamamen silin.)

29
Bu açıklama inanılmazdı. Teşekkür ederim!
thomasmalt

7
Haftanın en sevdiğim cevabı :) Ve çok faydalı. Teşekkürler!
5hrp

5
Sanırım bundan sonra cevaplarda emojiler gerekli olmalı.
James Webster

3
Benim durumumda olduğu gibi Günlükte Göster griyse ne olur?
bakalolo

6
Benim - Sağ tıklayın> Günlük Ortaya : Ben ref olarak kullanıyor günlükleri açtı böylece hiçbir şey yapıyordu stackoverflow.com/questions/19014359/...
terrigenus

39

Bu mesaj, film şeridinizde bir görünümü devre dışı bıraktığınızda, ancak bu görünüme dayalı kısıtlamaları devre dışı bırakmadığınızda tetiklenir.

Örneğin, bir düğmeyi devre dışı bıraktınız, ancak yine de o düğmeye bağlı bazı kısıtlamalarınız var. Yükseklik veya genişlik gibi içsel bir kısıtlama veya başka bir görünümden uzaklık gibi göreceli bir kısıtlama olabilir.

Görünüme referans veren kısıtlamaların her birini kapatmanız ve bunu manuel olarak yapmanız gerekir. Xcode burada aşırı muhafazakar ve bunu sizin için yapmayacaktır.


4
Cevabın için teşekkürler! "Görünümün devre dışı bırakılması" nın ne olduğunu daha belirgin hale getirebilir misiniz? Bir görünümü silmek mi (bir düğme gibi)? ancak zaten silmiş olduğum için, kısıtlama da silinebilir ve bulunamadı? Ve daha ayrıntılı olarak "kısıtlamayı nasıl kapatabilirim", sadece seçin ve silin? Çok teşekkür ederim!
Zhihao Yang

2
Bir görünüm, Interface Builder'da mevcut boyut sınıfı için "Yüklendi" olarak işaretlenmemişse, devre dışı bırakılır.
DivideByZer0

Film şeridimde birçok ViewControllers var. ¿Hangisinin yüklenmemiş alt görünümü olduğunu nasıl anlarım?
jobima

uyarıya sağ tıklayıp "Kaynak Kodu" seçeneğini seçebilirsiniz. Orada, ilgili görünümün hiyerarşisini saygın görünüm denetleyicisinde açıkça görmelisiniz.
ZaEeM ZaFaR

15

Bu çözüm benim için çalışıyor.

Xcode 5'te geliştirdiğim projeden birkaç öğeyi Xcode 6'ya kopyaladığım ve Xcode 6'daki storyboard birden çok düzeni desteklediğinden, her kısıtlama için onu mevcut yapılandırmaya yüklemem gerekiyor.

Örneğin, aşağıdaki gibi ayarlamam gereken kısıtlama için "Kompakt Genişlik | Normal Yükseklik" kullanıyorum:

görüntü açıklamasını buraya girin

Projelerimdeki yüzlerce kısıtlamayı kontrol edip ayarladıktan sonra, temizleyin ve inşa edin, uyarılar sonunda kayboldu.


1
Ayrıca Installed, görünüm nesnesi özelliklerinizde bu sinir bozucu onay kutularının da bulunduğunu unutmayın. Yani görünümü olduğunu düşündüğümüz bu nesneleri emin olmak görüntülenmesini doğru onay kutusu işaretli var. Uyarı, size bazı nesnelerin içinde görüntülenmediğini söylüyor current configuration.
Matt

Bu benim için de çalıştı. XCode 12 veya 13 uyarım olduğunu söyledi, ancak günlüğe bakıldığında en az 100 tane olduğunu gördüm. Bu yüzden her birinin üzerinden geçtim, her kısıtlama için bir wChR ekledim ve ardından genel 'Yüklü' seçeneğinin işaretini kaldırdım. Uyarılar kayboldu!
Andreas

Oh, söylemeyi unuttum. Yolun yarısında, bu işlemi aynı anda seçerek birkaç kısıtlama için aynı anda yapabileceğinizi fark ettim.
Andreas

8

Sadece bu Hatanın benim için nasıl oluştuğunu eklemek istedim: Benim durumumda, "Cmd + Backspace" ile bir Metin alanını silmek istedim. Bunu doğrudan Sahne Oluşturucu Ağaç Görünümünde yaptım:

görüntü açıklamasını buraya girin

Erteleme Alanının grileştiğini görebilirsiniz.

Bu benim için kolayca keşfedildi. Şunu seçerek Alanı gerçekten silebilirsiniz:

Menüden Düzenle-Sil

Şaşırtıcı bir şekilde - bu, alanı gerçekten siler (kısıtlamalar dahil). Belki bu, birinin bu sinir bozucu Uyarının nedenini kolayca bulmasına yardımcı olur ...


Bu soruya gerçekten cevap vermiyor. Farklı bir sorunuz varsa, Soru Sor'a tıklayarak sorabilirsiniz . Yeterli itibara sahip olduğunuzda bu soruya daha fazla dikkat çekmek için bir ödül de ekleyebilirsiniz . - Yorumdan
Martin Evans

3
Bu, sorulan sorunun çözülmesinin başka bir yoludur. Yani sadece başkalarına yardım etmek için bunu eklemek istedim ...
Dirk

Teşekkürler, çok yardımcı oldu
Ahmed Elashker

Bu yanıt, sorunun nasıl bulunacağı ve düzeltileceği konusunda daraltılmıştır. Benim için çalıştı!
Lance Samiriye

6

Genişletilmiş Açıklama

Diğer cevaplarda yanlış bir şey yok. Sadece dikkat çekmek istedik kelimelerde de orijinal uyarı ve bu kişinin iş akışında görünebilir kullanım senaryoları bir çift tanımlamak için.

kısıtlama uyarısı

Mevcut konfigürasyonda kısıt referans öğeleri kapatıldı.

Bir veya daha fazla kısıtlamada referans verilen bazı öğelerin (genellikle normalde görünür olan bir kontrol veya özel görünüm) kapatıldığı (devre dışı bırakıldığı veya "yüklü" onay kutusunun işaretinin kaldırıldığı) anlamına gelir. Örneğin, film şeridinizdeki bir kontrolü veya görünümü ana görünümün dışına taşımak istediğinize karar verirseniz (veya bazen boyut sınıflarında ilginç bir şey yaparken görebilirsiniz), o zaman kontrolün kısıtlamaları varsa bu uyarıyı görebilirsiniz. .

kaldırılmış denetim

Önerilen çözümle birlikte:

Mevcut yapılandırmada bu kısıtlamayı kapatın.

Düzeltilecek İki Yaklaşım

Belge Taslağı

Görsel olarak, film şeridinizde Belge Ana Hattını açabilir ve ana görünümün dışında oturan kontrolünüze / görünümünüze atıfta bulunan gri Kısıtlamaları arayabilirsiniz (ana hatları genişletin, kısıtlamayı tıklayın ve öznitelik denetçisini görüntüleyin, hızlıca incelemek için fareyi aşağı indirin) . Ardından bu bağlamdan (boyut sınıfı) kısıtlamayı kaldırın. Örneğin, benim durumumda, daha sonra nerede sunacağıma karar verene kadar kontrolü elimde tutuyorum, bu nedenle rahatsız edici kısıtlamayı daha sonraya kadar tamamen silmeyi seçtim. Ancak bir boyut sınıfında, öznitelik denetçisindeki kurulu onay kutusunu kullanarak kısıtlamayı geçerli bağlamdan kaldırırdım.

Günlük Gezgini / Bulma Aracı

Film şeridindeki her bir nesneye verilen benzersiz tanımlayıcı aracılığıyla sorun kontrolünü bulmak için Günlük Gezgini'ni kullanmaya da devam edilebilir. Günlükte, sarı ile vurgulanan metnin hemen önünde olur ve tipik olarak yukarıdaki örneğimde görüldüğü gibi formu alır: jvj-mY-DHf

Tanımlayıcıyı kullanarak, sorun teşkil eden kısıtlamayı bulmak ve silmek (tamamen) veya kaldırmak (mevcut bağlam için) için Xcode'daki bulma aracı kullanılabilir.

günlük gezgini

Xml ve sadeliğinden hoşlanıyorsanız, Storyboard'u Kaynak Kodu olarak açabilir ve rahatsız edici benzersiz tanımlayıcıyı bulabilir ve uygun xml bloğunu silebilirsiniz.


1

Bunun olmasının nedenlerinden biri, kısıtlamalarınızla uyumlu olmayan bir boyut sınıfı seçmiş olmanızdır ( wAny hAnyyaygın bir durumdur). Böyle bir durumda, Interface Builder'da sadece farklı bir boyut sınıfı seçin ve bitirdiniz.


1

Benim için, "Kenar boşluklarına sınırlama" seçeneği işaretlenmemiş olarak bir nesneye yeni bir nesne (görüntülemeye değil) karşı koyarsam olur. Seçeneği işaretleyerek sorun çözüldü (varsayılan olan).


1

Benim için işe yarayan şey (ve neden olduğuna dair hiçbir fikrim yok) "Özellik Varyasyonlarını Kullan" ı kapatmak, sonra bir temizlik yapmak ve sonra tekrar açmak. Sonraki yapının hiçbir uyarısı yoktu.

"Özellik Varyasyonlarını Kullan" ı kapatmak için, Proje Gezgini'nde film şeridinizi seçin ve ardından Dosya Denetçisi'ni seçin.

görüntü açıklamasını buraya girin

Ardından, "Özellik Varyasyonlarını Kullan" seçeneğinin işaretini kaldırın, Shift-CMD K tuşlarına basarak temizlik yapın ve ardından kullanmak istiyorsanız özellik varyasyonlarını tekrar açın.

görüntü açıklamasını buraya girin


Bunun kendiliğinden "doğru" olduğunu sanmıyorum (kısıtlamalar ortadan kalkıyor), ancak bu cevap benim için yararlıydı çünkü bu anahtarla uğraşıp son işlemeye geri döndüğümde, Xcode eski / yanlışları güzelce güncelleyecekti. / bu türden uyarılar zaten düzeltildi. Görünüşe göre Xcode eski, zaten düzeltilmiş uyarıları aslında çoğu zaman gösterecek - Xcode'u yeniden başlatmak normalde bana yardımcı olmaz. Bu anahtarı + geri yüklemeyi son işlemeye çevirmek, bu türden bir sonraki "gerçek" uyarıyı gösteriyor gibi görünüyor; üzerine tıklamak IB'deki sorunlu kısıtlamayı otomatik olarak seçecektir.
Jonny

0

Diğer cevap nedeniyle bunun kalıcı bir kısıtlama olduğunu düşündüm, ancak daha önce sildiğim bir öğe için hala sahip olduğum bir 'çıkıştan' kaynaklanıyordu. Ne yapmalı:

  1. ViewController'ınızı seçin
  2. Sağ üstteki 'çıkış' simgesine tıklayın
  3. Çıkışlarınıza bakın ve ihtiyacınız olmayanları dikkatlice silin

En kötü durum senaryosu, tüm prizlerinizi silip yeniden bağlarsınız. Dava çözüldü!


0

@ BadCat'ın cevabında belirtildiği ve iyi yönlendirildiği gibi , adımları takip ettim ve atmaya cesaret ettiğim bir adım daha!

BadCats yanıtının son adımından sonra atılacak adımlar:

Aşama 1:

Arabirim Oluşturucu'da kısıtlamayı seçtim ve bunun ne için olduğunu aklıma getirip sildim.

Adım 2

XCode Projesini oluşturun ve size Uyarıların sayısının arttığını gösterecektir. Bunun nedeni, iyi derlenmesi gereken bir kısıtlamayı silmiş olmanızdır. Öyleyse 3. Adıma geçin!

Aşama 3

Aklınızda tuttuğunuz kısıtlamayı (sildiğiniz kısıtlamayı) yeniden ekleyin. Ve sonra yeniden inşa edin!

Benim için uyarılar sırf bunu yaparak ortadan kalktı! Sanırım bu bazı insanlar için işe yarayacak!

Sebep olmak:

Bu uyarıya neden olan sorunu anlayabildiğim için, IBOutlet'e bağlı bir Etiketim vardı, ancak adı büyük harfle başlıyordu. Bu yüzden ViewController'da basit bir harfle adını değiştirdim ve IB'de onu değiştirmeye geldim. IBOutlet'i geçtim ve onu yeni yeniden adlandırılan mülk adına bağladım ve bağladım. Sonra yeni bir uyarı geldiğini fark ettim.

İlk önce aşağıdaki cevabı bu başlıkta da denedim , ancak yardımcı olmadı!

Şerefe!


0

Benim durumum etiketi seçin, ardından kontrol + X'e tıklayın, devre dışı bırakılacak, ancak onunla hiçbir şey yapmıyorum. İnşa ettiğimde uyarı gösterecek. Çözüm: etiketi kaldırın veya etiket için seçilen + X kontrolünü kaldırın.


0

Tüm bu UI öğelerini, kısıtlamaları da dahil olmak üzere siliyorum ve hepsini tekrar ekliyorum, bu uyarılar kayboluyor. Her neyse, bu, bunu çözmenin en kötü ama faydalı yolu.


0

Yığın görünümünde sorun yaşadım. Kısıtlamaları silmek ve yeniden eklemek yardımcı olmadı. Temizlik ve yeniden inşa yardımcı olmadı.

Benim için çözüm, tamamen yeni bir yığın görünümü nesnesi oluşturmaktı.

Ardından, tüm öğeleri eski yığın görünümünden yeni yığın görünümüne taşıyın.

Eski yığın görünümünü silmek sorunu çözdü.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.