Я вижу ошибку в моем журнале отладчика:
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.
Как мне перехватить этот звонок? Это не появляется нигде в моем коде.
ios
autolayout
uikit
constraints
xcode7
Мори Марковиц
источник
источник
Ответы:
Это сообщение помогло мне МНОГО !
Я добавил символическую точку останова UIViewAlertForUnsatisfiableConstraints с предлагаемым действием:
Проект Obj-C
Свифт проект
С этой подсказкой журнал стал более подробным, и мне было легче определить, в каком представлении нарушено ограничение.
Затем я приостановил выполнение и изменил цвет фона проблемного вида с помощью команды ( конечно, заменив
0x7f88a8cc2050
ее адресом памяти вашего объекта ) ...Obj-C,
Swift 3.0
... и результат был потрясающим!
Просто удивительно! Надеюсь, поможет.
источник
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]
возвращаетсяnil
за мнойВы хотите добавить
Symbolic Breakpoint
. Apple предоставляет отличное руководство о том, как это сделать.cmd+7
(cmd+8
в Xcode 9)Add
кнопку в левом нижнем углуAdd Symbolic Breakpoint...
Symbol
просто введитеUIViewAlertForUnsatisfiableConstraints
Вы также можете обрабатывать его как любую другую точку останова, включать и выключать ее, добавлять действия или регистрировать сообщения.
источник
NSLayoutConstraint
имеетidentifier
свойство начиная с iOS 7 - Xcode 7 и выше , которое может быть установлено как из IB Storyboards, так и из кода. Установив идентификатор, вы можете легче различать системные и пользовательские ограничения в журнале отладки, напримерmyConstraint.identifier = "centered image"
(источник и примеры: useyourloaf.com/blog/using-identifiers-to-debug-autolayout )Последовал совету Стивена и попытался отладить код и все! это сработало. Ответ лежит в самом отладочном сообщении.
Will attempt to recover by breaking constraint NSLayoutConstraint:0x191f0920 H:[MPKnockoutButton:0x17a876b0]-(34)-[MPDetailSlider:0x17a8bc50](LTR)>
Строка выше говорит вам, что среда выполнения работала, удалив это ограничение. Может быть, вам не нужен горизонтальный интервал для вашей кнопки (MPKnockoutButton). Как только вы удалите это ограничение, оно не будет жаловаться во время выполнения, и вы получите желаемое поведение.
источник
Всякий раз, когда я пытаюсь удалить ограничения, которые система должна была нарушить, моих ограничений уже недостаточно для удовлетворения IB (то есть «отсутствующие ограничения» отображаются в IB, что означает, что они неполные и не будут использоваться). Я на самом деле обошел это, установив ограничение, которое оно хочет нарушить, на низкий приоритет, что (и это предположение) позволяет системе грациозно нарушить ограничение. Возможно, это не лучшее решение, но оно решило мою проблему, и полученные ограничения сработали отлично.
источник