Estou vendo um erro aparecer no meu log do depurador:
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.
Como faço para interceptar essa ligação? Ele não aparece em nenhum lugar do meu código.
ios
autolayout
uikit
constraints
xcode7
Maury Markowitz
fonte
fonte
Respostas:
Este post me ajudou MUITO !
Eu adicionei UIViewAlertForUnsatisfiableConstraints ponto de interrupção simbólica com ação sugerida:
Projeto Obj-C
Projeto Swift
Com essa dica, o log ficou mais detalhado e foi mais fácil para mim identificar qual visualização tinha a restrição quebrada.
Em seguida, parei a execução e alterei a cor de fundo da visualização problemática com o comando (substituindo
0x7f88a8cc2050
pelo endereço de memória do seu objeto, é claro) ...Obj-C
Swift 3.0
... e o resultado Foi incrível!
Simplesmente incrível! Espero que ajude.
fonte
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]
retornanil
para mimVocê deseja adicionar um
Symbolic Breakpoint
. A Apple fornece um excelente guia sobre como fazer isso.cmd+7
(cmd+8
no Xcode 9)Add
botão no canto inferior esquerdoAdd Symbolic Breakpoint...
Symbol
apenas digitarUIViewAlertForUnsatisfiableConstraints
Você também pode tratá-lo como qualquer outro ponto de interrupção, ativando e desativando, adicionando ações ou registrando mensagens.
fonte
NSLayoutConstraint
possui umaidentifier
propriedade desde o iOS 7 - Xcode 7 e superior , que pode ser configurada no IB Storyboards e no código. Ao definir o identificador, você pode distinguir com mais facilidade entre restrições geradas pelo sistema e geradas pelo usuário no log de depuração, por exemplomyConstraint.identifier = "centered image"
(origem e exemplos: useyourloaf.com/blog/using-identifiers-to-debug-autolayout )Seguiu o conselho de Stephen e tentou depurar o código e whoa! funcionou. A resposta está na própria mensagem de depuração.
Will attempt to recover by breaking constraint NSLayoutConstraint:0x191f0920 H:[MPKnockoutButton:0x17a876b0]-(34)-[MPDetailSlider:0x17a8bc50](LTR)>
A linha acima informa que o tempo de execução funcionou removendo essa restrição. Talvez você não precise do Espaçamento Horizontal no botão (MPKnockoutButton). Depois de limpar essa restrição, ela não se queixará no tempo de execução e você obterá o comportamento desejado.
fonte
Sempre que tento remover as restrições que o sistema precisou quebrar, minhas restrições não são mais suficientes para satisfazer o IB (ou seja, "restrições ausentes" aparecem no IB, o que significa que elas estão incompletas e não serão usadas). Na verdade, eu resolvi isso definindo a restrição que ele deseja quebrar com baixa prioridade, o que (e isso é uma suposição) permite que o sistema rompa a restrição normalmente. Provavelmente não é a melhor solução, mas resolveu meu problema e as restrições resultantes funcionaram perfeitamente.
fonte