尝试调试AutoLayout问题(在某些情况下,表单元格应根据其内容的大小而增长)时,我在tableView:heightForRow:方法的最后一行设置了一个断点,并尝试打印该值的systemLayoutSizeFittingSize:我得到这个:

(lldb) p ((CGSize)[cachedCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]).height
2014-10-14 11:15:49.492 AppName[72132:10302054] This NSLayoutConstraint is being configured with a constant that exceeds internal limits.  A smaller value will be substituted, but this problem should be fixed. Break on void _NSLayoutConstraintNumberExceedsLimit() to debug.  This will be logged only once.  This may break in the future.
(CGFloat) $0 = 57

好吧,那很有趣。但是我尝试按照它说的做,并在该函数上设置一个断点:

...并且此断点不会受到攻击。
  • 我是否正确设置了断点?
  • 无论如何,关于我的约束导致问题的任何线索是什么?

  • (令人讨厌的是,它似乎在某些情况下有效,但在其他情况下则无效,我看不出设置有什么区别。)

    最佳答案

    从符号名称中省略()。如果您使用调试器控制台窗口通过breakpoint set --name命令设置此断点,则发生的情况会更清楚一些:

    (lldb) br s -n _NSLayoutConstraintNumberExceedsLimit()
    Breakpoint 1: no locations (pending).
    WARNING:  Unable to resolve breakpoint to any actual locations.
    (lldb) br s -n _NSLayoutConstraintNumberExceedsLimit
    Breakpoint 2: where = Foundation`_NSLayoutConstraintNumberExceedsLimit, address = 0x00007fff9168e6f5
    (lldb)
    

    如果您在Xcode调试 session 中使用了breakpoint list(br l)命令,您会发现_NSLayoutConstraintNumberExceedsLimit()断点未在任何位置设置。

    10-08 15:04