W dzienniku debugowania pojawia się błąd:
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.
Jak przechwycić to połączenie? Nie pojawia się nigdzie w moim kodzie.
ios
autolayout
uikit
constraints
xcode7
Maury Markowitz
źródło
źródło
Odpowiedzi:
Ten post pomógł mi naprawdę dużo !
Dodałem UIViewAlertForUnsatisfiableConstraints symboliczne przerwania z proponowanych działań:
Projekt Obj-C
Szybki projekt
Dzięki tej podpowiedzi dziennik stał się bardziej szczegółowy i łatwiej było mi określić, który widok złamał ograniczenie.
Potem wstrzymałem wykonywanie i zmieniłem kolor tła problematycznego widoku za pomocą polecenia ( oczywiście zastępując
0x7f88a8cc2050
adres pamięci twojego obiektu ) ...Obj-C
Swift 3.0
... i wynik To było niesamowite!
Po prostu wspaniałe! Mam nadzieję, że to pomoże.
źródło
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]
wracanil
do mnieBędziesz chciał dodać
Symbolic Breakpoint
. Apple zapewnia doskonały przewodnik, jak to zrobić.cmd+7
(cmd+8
w Xcode 9)Add
przycisk w lewym dolnym roguAdd Symbolic Breakpoint...
Symbol
po prostu wpiszUIViewAlertForUnsatisfiableConstraints
Możesz także traktować go jak każdy inny punkt przerwania, włączając go i wyłączając, dodając akcje lub rejestrując wiadomości.
źródło
NSLayoutConstraint
maidentifier
właściwość od iOS 7 - Xcode 7 i wyżej , które można ustawić zarówno z IB Storyboardów, jak i z kodu. Ustawiając identyfikator, można łatwiej odróżnić ograniczenia generowane przez system i generowane przez użytkownika w dzienniku debugowania, np.myConstraint.identifier = "centered image"
(Źródło i przykłady: useyourloaf.com/blog/using-identifiers-to-debug-autolayout )Postępował zgodnie z radą Stephena i próbował debugować kod i whoa! zadziałało. Odpowiedź leży w samym komunikacie debugowania.
Will attempt to recover by breaking constraint NSLayoutConstraint:0x191f0920 H:[MPKnockoutButton:0x17a876b0]-(34)-[MPDetailSlider:0x17a8bc50](LTR)>
Linia powyżej mówi, że środowisko wykonawcze działało poprzez usunięcie tego ograniczenia. Być może nie potrzebujesz odstępów poziomych na swoim przycisku (MPKnockoutButton). Po usunięciu tego ograniczenia nie będzie narzekać w czasie wykonywania i uzyskasz pożądane zachowanie.
źródło
Ilekroć próbuję usunąć ograniczenia, które musiał złamać system, moje ograniczenia nie są już wystarczające, aby spełnić IB (tzn. „Brakujące ograniczenia” pokazują się w IB, co oznacza, że są niekompletne i nie będą używane). W rzeczywistości udało mi się obejść ten problem, ustawiając ograniczenie, które chce złamać, na niski priorytet, co (i jest to założenie) pozwala systemowi z łatwością złamać ograniczenie. Prawdopodobnie nie jest to najlepsze rozwiązanie, ale rozwiązało mój problem, a wynikające z niego ograniczenia działały idealnie.
źródło