Saya melihat kesalahan muncul di log debugger saya:
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x191f0920 H:[MPKnockoutButton:0x17a876b0]-(34)-[MPDetailSlider:0x17a8bc50](LTR)>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
Bagaimana cara saya menjebak panggilan itu? Tidak muncul di mana pun dalam kode saya.
ios
autolayout
uikit
constraints
xcode7
Maury Markowitz
sumber
sumber
Jawaban:
Posting ini membantu saya BANYAK !
Saya menambahkan breakpoint simbolik UIViewAlertForUnsatisfiableConstraints dengan tindakan yang disarankan:
Proyek Obj-C
Proyek cepat
Dengan petunjuk ini, log menjadi lebih terperinci, dan Lebih mudah bagi saya untuk mengidentifikasi pandangan mana yang memiliki kendala.
Kemudian saya menghentikan eksekusi dan saya mengubah warna latar belakang tampilan bermasalah dengan perintah (mengganti
0x7f88a8cc2050
dengan alamat memori objek Anda tentu saja) ...Obj-C
Swift 3.0
... dan hasilnya Luar Biasa!
Sangat menakjubkan! Semoga ini bisa membantu.
sumber
rror: Execution was interrupted, reason: EXC_BAD_ACCESS (code=1, address=0x7f88a8cc2050). The process has been returned to the state before expression evaluation.
expr -l objc++ -O -- [[UIWindow keyWindow] _autolayoutTrace]
kembalinil
untuk sayaAnda ingin menambahkan
Symbolic Breakpoint
. Apple memberikan panduan yang sangat baik tentang cara melakukan ini.cmd+7
(cmd+8
dalam Xcode 9)Add
tombol di kiri bawahAdd Symbolic Breakpoint...
Symbol
ketik sajaUIViewAlertForUnsatisfiableConstraints
Anda juga dapat memperlakukannya seperti breakpoint lainnya, menyalakan dan mematikannya, menambahkan tindakan, atau mencatat pesan.
sumber
NSLayoutConstraint
telah memilikiidentifier
properti sejak iOS 7 - Xcode 7 ke atas , yang dapat diatur baik dari IB Storyboards maupun dari kode. Dengan mengatur pengenal Anda dapat lebih mudah membedakan antara yang dihasilkan oleh sistem dan yang dihasilkan oleh pengguna di log debug, misalnyamyConstraint.identifier = "centered image"
(sumber & contoh: useyourloaf.com/blog/using-identifiers-to-debug-autolayout )Ikuti saran Stephen dan mencoba men-debug kode dan whoa! itu berhasil. Jawabannya terletak pada pesan debug itu sendiri.
Will attempt to recover by breaking constraint NSLayoutConstraint:0x191f0920 H:[MPKnockoutButton:0x17a876b0]-(34)-[MPDetailSlider:0x17a8bc50](LTR)>
Baris di atas memberi tahu Anda bahwa runtime berfungsi dengan menghapus batasan ini. Mungkin Anda tidak perlu Horizontal Spacing pada tombol Anda (MPKnockoutButton). Setelah Anda menghapus batasan ini, itu tidak akan mengeluh saat runtime & Anda akan mendapatkan perilaku yang diinginkan.
sumber
Setiap kali saya mencoba untuk menghilangkan kendala yang harus dilanggar oleh sistem, kendala saya tidak lagi cukup untuk memenuhi IB (yaitu "kendala yang hilang" muncul di IB, yang berarti mereka tidak lengkap dan tidak akan digunakan). Saya benar-benar menyiasatinya dengan menetapkan batasan yang ingin dipecah menjadi prioritas rendah, yang (dan ini merupakan asumsi) memungkinkan sistem untuk memecahkan kendala dengan anggun. Ini mungkin bukan solusi terbaik, tapi itu menyelesaikan masalah saya dan kendala yang dihasilkan bekerja dengan sempurna.
sumber