"这个NSLayoutConstraint正在配置一个超出内部限制的常量"

Rob*_*ins 12 breakpoints uitableview ios lldb autolayout

在尝试调试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
Run Code Online (Sandbox Code Playgroud)

好吧,那很有意思.但我尝试按照它说的做,并在该函数上设置断点:

在_NSLayoutConstraintNumberExceedsLimit()上获取断点定义

......而且这个断点没有被击中.

  • 我正确设置断点吗?
  • 在任何情况下,任何关于我的约束导致这个问题可能出错的线索?

(令人讨厌的是,它似乎在某些情况下有效,但在其他情况下却没有,我看不出设置上的差异.)

Jas*_*nda 17

省略()符号名称.如果您使用调试器控制台窗口使用以下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) 
Run Code Online (Sandbox Code Playgroud)

如果您在Xcode调试会话中使用了breakpoint list(br l)命令,您会看到_NSLayoutConstraintNumberExceedsLimit()断点未在任何位置设置.

  • 终于解决了这个问题.如果我必须手动在标签上设置`preferredMaxLayoutWidth`,那么Auto Layout到底为我做了什么?! (3认同)