In meinem Debugger-Protokoll wird ein Fehler angezeigt:
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.
Wie fange ich diesen Anruf ab? Es erscheint nirgendwo in meinem Code.
ios
autolayout
uikit
constraints
xcode7
Maury Markowitz
quelle
quelle
Antworten:
Dieser Beitrag hat mir geholfen , VIEL !
Ich habe den symbolischen Haltepunkt UIViewAlertForUnsatisfiableConstraints mit der vorgeschlagenen Aktion hinzugefügt :
Obj-C-Projekt
Schnelles Projekt
Mit diesem Hinweis wurde das Protokoll detaillierter und es war für mich einfacher zu identifizieren, in welcher Ansicht die Einschränkung gebrochen war.
Dann habe ich die Ausführung angehalten und die Hintergrundfarbe der problematischen Ansicht mit dem Befehl geändert ( natürlich
0x7f88a8cc2050
durch die Speicheradresse Ihres Objekts ersetzt ) ...Obj-C
Swift 3.0
... und das Ergebnis Es war großartig!
Einfach unglaublich! Ich hoffe es hilft.
quelle
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]
kehrtnil
für mich zurückSie möchten eine hinzufügen
Symbolic Breakpoint
. Apple bietet eine hervorragende Anleitung dazu.cmd+7
(cmd+8
in Xcode 9).Add
Schaltfläche unten linksAdd Symbolic Breakpoint...
Symbol
einfach einUIViewAlertForUnsatisfiableConstraints
Sie können es auch wie jeden anderen Haltepunkt behandeln, ein- und ausschalten, Aktionen hinzufügen oder Nachrichten protokollieren.
quelle
NSLayoutConstraint
hatidentifier
seit iOS 7 - Xcode 7 und höher eine Eigenschaft , die sowohl über IB Storyboards als auch über Code festgelegt werden kann. Durch Festlegen des Bezeichners können Sie im Debug-Protokoll leichter zwischen vom System generierten und vom Benutzer generierten Einschränkungen unterscheiden, z. B.myConstraint.identifier = "centered image"
(Quelle und Beispiele: useyourloaf.com/blog/using-identifiers-to-debug-autolayout )Befolgen Sie Stephens Rat und versuchen Sie, den Code zu debuggen und whoa! es funktionierte. Die Antwort liegt in der Debug-Nachricht selbst.
Will attempt to recover by breaking constraint NSLayoutConstraint:0x191f0920 H:[MPKnockoutButton:0x17a876b0]-(34)-[MPDetailSlider:0x17a8bc50](LTR)>
Die obige Zeile zeigt Ihnen, dass die Laufzeit durch Entfernen dieser Einschränkung funktioniert hat. Möglicherweise benötigen Sie keinen horizontalen Abstand auf Ihrer Schaltfläche (MPKnockoutButton). Sobald Sie diese Einschränkung aufgehoben haben, wird sie zur Laufzeit nicht mehr beanstandet und Sie erhalten das gewünschte Verhalten.
quelle
Immer wenn ich versuche, die Einschränkungen zu entfernen, die das System aufheben musste, reichen meine Einschränkungen nicht mehr aus, um den IB zu erfüllen (dh "fehlende Einschränkungen" werden im IB angezeigt, was bedeutet, dass sie unvollständig sind und nicht verwendet werden). Ich habe dies tatsächlich umgangen, indem ich die Einschränkung, die aufgehoben werden soll, auf eine niedrige Priorität gesetzt habe, wodurch (und dies ist eine Annahme) das System die Einschränkung ordnungsgemäß aufheben kann. Es ist wahrscheinlich nicht die beste Lösung, aber es hat mein Problem gelöst und die daraus resultierenden Einschränkungen haben perfekt funktioniert.
quelle