Peringatan Xcode Storyboard: Kendala referensi item dimatikan dalam konfigurasi saat ini. Matikan batasan ini dalam konfigurasi saat ini

146

Peringatan ini terjadi di Xcode 6.1. Adakah yang tahu apa arti peringatan ini dan apa yang akan terjadi dengannya? Terimakasih banyak!

Di bawah ini adalah tangkapan layar dengan peringatan dibuka di kode sumber "

masukkan deskripsi gambar di sini

Bagaimana cara menemukan kendala yang menyebabkan peringatan? Xcode tidak memberi tahu Anda kendala mana yang menjadi masalah.

masukkan deskripsi gambar di sini

Zhihao Yang
sumber
@wumm ya, aplikasi dapat berhasil dibangun dan dijalankan, saya hanya khawatir bahwa beberapa masalah potensial mungkin terjadi, yang belum saya temui.
Zhihao Yang
7
Perhatikan bahwa secara umum masalah ini disebabkan oleh: Anda memiliki item yang belum diinstal, tetapi, ia memiliki kendala yang masih diinstal. Secara umum, temukan item yang belum diinstal, dan untuk semua kendala, tandai item tersebut belum diinstal.
Fattie
@Fattie Harap edit jawaban yang diterima dengan alasan utama ini. Terima kasih
Milan Kamilya

Jawaban:

431

Peringatan ini dapat mengganggu dan terjadi pada Xcode 6.1.1. Masalah utama adalah bahwa Anda tidak dapat dengan mudah menemukan batasan yang dirujuk dengan mengklik peringatan. Saya kira ini adalah bug dan akan diperbaiki cepat atau lambat.

Namun, sementara itu Anda dapat menggunakan solusi kecil ini:

Langkah 1: Deteksi peringatan yang mengganggu 😱

Peringatan yang mengganggu

Langkah 2: Kanan / Ctrl-Klik pada peringatan, pilih Reveal in Log😨

masukkan deskripsi gambar di sini

Langkah 3: Kagumi keindahan potongan log berikut:

... 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 ... Apa ini ...?

menarik

Langkah 4: Mari kita lemparkan ke bilah pencarian proyek ... 😐

Cari

😮 Ya, Anda menebak dengan benar. Klik itu.

Langkah 5: 😁 OMG! Nikmati beberapa menit produktivitas tambahan hingga Apple memperbaiki bug yang mengganggu ini. 😎

wheeee


Untuk 2016 ...

  • Jika Anda tidak bisa mendapatkannya dengan 'Reveal in Log', tunjukkan Report Navigator. (Itu adalah tab paling kanan di kolom paling kiri.) Menggali hasil build di sana. Itu akan menampilkan build log, termasuk ID kendala. kesopanan membangun berhasil

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

  • Perhatikan bahwa untuk Xcode 5/2016, secara mengganggu Anda harus keluar dan memulai ulang Xcode untuk menghapus peringatan ini dalam beberapa kasus.

  • Perhatikan bahwa secara membingungkan, kesalahan yang sama dapat disebabkan oleh masalah yang tidak terkait (ini tampaknya merupakan bug Apple atau penggunaan bahasa kesalahan yang buruk): jika Anda memiliki IBInspectableitem, dan kebetulan menamainya di file Swift Anda. Xcode tidak menghapus nama lama UserDefinedRuntimeAttributes untuk Anda. Cukup klik ke "Identity Inspector" (item 3 di panel kanan) dan hapus item tak berguna.

Untuk 2017 ...

  • Namun penyebab umum lain, dan memang lebih sederhana, dari masalah tersebut. Jika Anda tidak menginstal item: Pada saat penulisan, sangat sederhana Xcode tidak tahu untuk secara otomatis menghapus instalan kendala yang mengarah ke item itu . Sederhananya, lihat item yang belum diinstal, dan untuk semua kendala, tandai saja item itu belum diinstal. (Atau sederhananya, mungkin hanya untuk sementara menghapus item yang belum diinstal, untuk melihat apakah itu masalahnya.)
BastiBen
sumber
28
Penjelasan itu luar biasa. Terima kasih!
thomasmalt
7
Jawaban favorit saya minggu ini :) Dan sangat berguna. Terima kasih!
5hrp
5
Saya pikir emoji harus diminta dalam jawaban mulai sekarang.
James Webster
3
Bagaimana jika Reveal in Log diklik seperti dalam kasus saya?
akanolo
6
Klik Kanan Saya -> Reveal Log tidak melakukan apa-apa jadi saya membuka log menggunakan ini sebagai ref: stackoverflow.com/questions/19014359/...
terrigenus
39

Pesan ini dipicu ketika Anda telah menonaktifkan tampilan di storyboard Anda, tetapi tidak menonaktifkan kendala berdasarkan tampilan itu.

Misalnya, Anda menonaktifkan tombol, tetapi Anda masih memiliki beberapa kendala terkait dengan tombol itu. Ini mungkin merupakan kendala intrinsik seperti tinggi atau lebar, atau kendala relatif seperti jarak dari tampilan lain.

Anda harus mematikan setiap kendala yang merujuk pada tampilan, dan Anda harus melakukannya secara manual. Xcode terlalu konservatif di sini dan tidak akan melakukannya untuk Anda.

KPM
sumber
4
Terimakasih atas balasan anda! Bisakah Anda membuatnya lebih spesifik apa itu "tampilan nonaktif"? Apakah itu untuk menghapus tampilan (seperti tombol)? tetapi karena saya sudah menghapusnya, batasannya mungkin juga dihapus dan tidak dapat ditemukan? Dan bagaimana cara "mematikan kendala" secara lebih rinci, cukup pilih dan hapus saja? Terima kasih banyak!
Zhihao Yang
2
Jika tampilan tidak ditandai sebagai "Terpasang" di Interface Builder untuk kelas ukurannya saat ini, maka itu dinonaktifkan.
DivideByZer0
Saya memiliki banyak ViewControllers di storyboard saya. ¿Bagaimana saya tahu yang mana yang memiliki subview yang tidak diinstal?
jobima
Anda dapat mengklik kanan pada peringatan itu dan memilih opsi "Kode Sumber". Di sana Anda harus melihat dengan jelas hierarki tampilan yang sesuai di controller tampilan yang dihormati.
ZaEeM ZaFaR
15

Solusi ini bekerja untuk saya.

Karena saya menyalin beberapa item dari proyek yang saya kembangkan di Xcode 5 ke Xcode 6, dan storyboard di Xcode 6 mendukung banyak tata letak, untuk setiap kendala, saya perlu menginstalnya dalam konfigurasi saat ini.

Misalnya, saya menggunakan "Lebar Ringkas | Tinggi Reguler", untuk batasan yang harus saya atur seperti di bawah ini:

masukkan deskripsi gambar di sini

Setelah saya memeriksa dan mengatur ratusan kendala dalam proyek saya, membersihkan dan membangun, peringatan akhirnya hilang.

Zhihao Yang
sumber
1
Perhatikan ada juga Installedkotak centang sial di atribut objek tampilan Anda. Jadi pastikan bahwa objek tampilan yang Anda pikir sedang ditampilkan telah dicentang kotak yang benar. Peringatan itu memberi tahu Anda bahwa beberapa objek tidak ditampilkan di jendela current configuration.
Matt
Ini juga bekerja untuk saya. XCode mengatakan saya punya 12 atau 13 peringatan, tetapi melihat log untuk salah satu dari mereka menunjukkan setidaknya ada 100. Jadi saya memeriksa masing-masing, menambahkan wChR untuk setiap kendala dan kemudian menghapus centang pada generik 'Terpasang'. Peringatan menghilang!
Andreas
Oh, lupa disebutkan. Saya menyadari sekitar setengah jalan bahwa Anda benar-benar dapat melakukan proses ini untuk beberapa kendala sekaligus dengan memilihnya secara bersamaan.
Andreas
8

Hanya ingin menambahkan kasus saya bagaimana Kesalahan ini terjadi pada saya: Dalam kasus saya, saya ingin menghapus Textfield dengan "Cmd + Backspace". Saya melakukan ini langsung di Scene-Builder Tree-View:

masukkan deskripsi gambar di sini

Anda dapat melihat bahwa bidang tunda berwarna abu-abu.

Jadi itu mudah ditemukan bagi saya. Anda dapat benar-benar menghapus Field dengan memilih:

Edit-Hapus dari Menu

Anehnya - ini benar-benar menghapus bidang (termasuk kendala). Mungkin ini membantu seseorang untuk dengan mudah menemukan penyebab Peringatan yang menjengkelkan ini ...

Beladau
sumber
Ini tidak benar-benar menjawab pertanyaan itu. Jika Anda memiliki pertanyaan yang berbeda, Anda dapat menanyakannya dengan mengeklik Ajukan Pertanyaan . Anda juga dapat menambahkan hadiah untuk menarik lebih banyak perhatian ke pertanyaan ini setelah Anda memiliki reputasi yang cukup . - Dari Ulasan
Martin Evans
3
Ini adalah cara lain pertanyaan yang diajukan dapat diperbaiki. Jadi hanya ingin menambahkan ini untuk membantu orang lain ...
Dirk
Terima kasih, sangat membantu
Ahmed Elashker
Jawaban ini mempersempit cara menemukan dan memperbaiki masalah. Itu berhasil untuk saya!
Lance Samaria
6

Penjelasan yang Diperluas

Tidak ada yang salah dengan jawaban lainnya. Saya hanya ingin menarik perhatian pada kata - kata dalam peringatan asli dan untuk mengidentifikasi beberapa kasus penggunaan di mana ini dapat muncul dalam alur kerja seseorang.

peringatan kendala

Batasan referensi item dimatikan dalam konfigurasi saat ini.

Berarti bahwa beberapa item (biasanya tampilan kontrol atau kustom yang biasanya terlihat) direferensikan dalam satu atau lebih kendala dimatikan (dinonaktifkan atau centang "diinstal" kotak centang). Jika misalnya Anda memutuskan bahwa Anda ingin memindahkan kontrol atau tampilan di storyboard Anda di luar tampilan utama (atau Anda mungkin melihat kadang-kadang ketika melakukan sesuatu yang menarik di kelas ukuran) maka Anda dapat melihat peringatan ini jika kontrol memiliki kendala yang melekat padanya .

uninstall-kontrol

Seiring dengan solusi yang disarankan:

Matikan batasan ini dalam konfigurasi saat ini.

Dua Pendekatan untuk Memperbaiki

Garis Besar Dokumen

Secara visual Anda dapat membuka Document Outline di storyboard Anda dan mencari kendala abu-abu yang merujuk kontrol Anda / tampilan duduk di luar tampilan utama (memperluas garis besar, klik kendala, dan melihat atribut inspektur, mouse ke bawah untuk meninjau dengan cepat) . Kemudian hapus kendala dari konteks ini (kelas ukuran). Sebagai contoh, dalam kasus saya, saya hanya memegang kontrol sampai saya memutuskan nanti di mana harus menyajikannya, jadi saya memilih untuk menghapus sepenuhnya kendala yang menyinggung sampai nanti. Tetapi dalam kelas ukuran saya hanya akan menghapus kendala dari konteks saat ini menggunakan kotak centang yang dipasang di inspektur atribut.

Log Navigator / Alat Cari

Seseorang juga dapat terus menggunakan Log Navigator untuk menemukan kontrol masalah melalui pengidentifikasi unik yang diberikan untuk setiap objek di storyboard. Dalam log itu akan tepat sebelum teks yang disorot kuning dan biasanya mengambil bentuk seperti yang terlihat dalam contoh saya di atas: jvj-mY-DHf

Dengan menggunakan pengidentifikasi seseorang kemudian dapat menggunakan alat temukan di Xcode untuk menemukan dan menghapus (sepenuhnya) atau menghapus (untuk konteks saat ini) kendala yang menyinggung.

log-navigator

Jika Anda menyukai Xml dan kesederhanaannya, Anda juga bisa membuka Storyboard sebagai Source Code dan menemukan pengidentifikasi unik yang menyinggung dan menghapus blok xml yang sesuai.

Tommie C.
sumber
1

Salah satu alasan ini bisa terjadi adalah karena Anda memilih kelas ukuran yang tidak kompatibel dengan kendala Anda ( wAny hAnyadalah kasus umum). Dalam kasus seperti itu, cukup pilih kelas ukuran yang berbeda di Interface Builder dan Anda selesai.

Jano
sumber
1

Bagi saya, itu terjadi jika saya menetapkan objek contraint baru ke objek (bukan tampilan) dengan opsi "Batasi ke margin" tidak dicentang. Masalah diselesaikan dengan mencentang opsi (yang default).

Ryde
sumber
1

Apa yang berhasil untuk saya (dan saya tidak tahu mengapa) adalah mematikan "Gunakan Variasi Sifat", lalu lakukan pembersihan, lalu nyalakan kembali. Bangunan berikutnya tidak memiliki peringatan.

Untuk mematikan "Gunakan Variasi Karakter" cukup pilih storyboard Anda di Project Navigator dan kemudian pilih File Inspector.

masukkan deskripsi gambar di sini

Kemudian cukup hapus "Use Variation Variations", lakukan pembersihan dengan menekan Shift-CMD K, dan kemudian nyalakan kembali variasi ciri jika Anda ingin menggunakannya.

masukkan deskripsi gambar di sini

Skuter
sumber
Saya tidak berpikir ini "benar" per se (kendala hilang), namun jawaban ini sangat membantu bagi saya karena segera setelah saya mengutak-atik saklar ini, dan kemudian mengembalikan perubahan ke komit terakhir, Xcode akan dengan baik memperbarui yang lama / salah Saya sudah memperbaiki peringatan semacam ini. Tampaknya Xcode akan menampilkan peringatan yang sudah lama dan sudah benar-benar diperbaiki - memulai ulang Xcode biasanya tidak akan membantu saya. Membalik sakelar + restore ke komit terakhir tampaknya menunjukkan peringatan "nyata" berikutnya dari jenis ini; mengkliknya akan secara otomatis memilih kendala yang bermasalah di IB.
Jonny
0

Saya pikir itu adalah kendala yang masih ada karena jawaban yang lain, namun itu karena 'outlet' yang saya miliki untuk item yang saya hapus sebelumnya. Yang harus dilakukan adalah:

  1. Pilih ViewController Anda
  2. Klik ikon 'outlet' di kanan atas
  3. Lihat outlet Anda dan hapus dengan hati-hati semua yang tidak Anda butuhkan

Skenario terburuk Anda menghapus semua outlet Anda dan menghubungkannya kembali. Kasus terpecahkan!

Terkekeh
sumber
0

Seperti yang disebutkan dan dipandu dengan baik dalam jawaban @ BadCat , saya mengikuti langkah-langkahnya dan hanya satu langkah lagi yang berani saya ambil!

Langkah-langkah yang harus dilakukan setelah langkah terakhir jawaban BadCats:

Langkah 1:

Saya memilih kendala di Interface Builder dan kemudian mengingatnya untuk apa dan kemudian menghapusnya.

Langkah 2

Bangun Proyek XCode dan itu akan menunjukkan Anda mungkin jumlah Peringatan meningkat. Itu karena Anda telah menghapus batasan yang harus dikompilasi dengan baik. Jadi, lanjutkan ke Langkah 3!

Langkah 3

Tambahkan kembali batasan yang Anda ingat (salah satu yang Anda hapus). Dan kemudian membangun kembali!

Bagi Aku peringatan itu hilang hanya dengan melakukan ini! Saya kira ini akan berhasil bagi sebagian orang!

Sebab:

Karena saya dapat memahami masalah yang menyebabkan peringatan ini adalah, saya memiliki Label yang terhubung ke IBOutlet, tetapi namanya dimulai dengan huruf kapital. Jadi saya menamainya dengan huruf sederhana di ViewController dan datang untuk mengubahnya di IB. Saya menghapus IBOutlet lalu dan menghubungkannya ke nama properti yang baru diganti namanya dan terhubung. Lalu saya perhatikan ada peringatan baru yang muncul.

Pertama saya mencoba jawaban berikut juga di utas ini, tetapi tidak membantu!

Bersulang!

Randika Vishman
sumber
0

Kasing saya pilih label, lalu klik control + X, itu akan dinonaktifkan, tapi saya tidak melakukan apa-apa dengannya. Ketika saya membangun, itu akan menampilkan peringatan. Solusi: hapus label atau hapus kontrol yang dipilih + X untuk label.

Duyen Hang Kim
sumber
0

Saya menghapus semua elemen UI termasuk batasannya, dan menambahkan semuanya lagi, peringatan itu hilang begitu saja. Bagaimanapun ini adalah cara terburuk tetapi berguna untuk menyelesaikan ini.

Yang lama
sumber
0

Saya punya masalah pada tampilan tumpukan. Menghapus kendala dan menambahkannya kembali tidak membantu. Membersihkan dan membangun kembali tidak membantu.

Bagi saya, solusinya adalah membuat objek tampilan tumpukan yang sama sekali baru.

Kemudian pindahkan semua elemen dari tampilan tumpukan lama ke tampilan tumpukan baru.

Menghapus tampilan stack lama memperbaiki masalah.

George Filippakos
sumber