如何调试错误的绑定

时间:2012-12-19 19:08:25

标签: objective-c debugging core-data interface-builder

我收到了CoreData的错误cannot create BOOL from object。我在这里读了很多问题,都得出了同样的结论:IB中的不正确约束 有没有办法列举所有绑定,或者是否有一个实用程序应用程序来检查绑定的类型?也许捕获错误,或实现一个在发生这种情况时调用的方法,以便我可以检索绑定对象的名称?我宁愿自己解决这个问题,也不愿让别人分析我的.xib

1 个答案:

答案 0 :(得分:1)

我一直把头发拉过来。在具有数十个或可能数百个绑定的XIB中,几乎不可能找到它来自何处。但我终于找到了一种缩小范围的方法。

我只是在

上设置了一个符号断点
-[NSValueBinder _observeValueForKeyPath:ofObject:context]

并按如下方式配置

  • 操作:调试器命令,输入po $rdi作为要执行的命令。每次达到断点时,这将打印出 self (即NSValueBinder描述)。这个($rdi)适用于x86_64,其他架构请参阅this article
  • 检查评估后自动继续

现在,当我运行程序时,我在控制台中获得了一堆与绑定相关的日志,看起来应该是这样的:

$7 = 4301564448 <NSTextValueBinder: 0x10064aa20>{object: <NSTextFieldCell: 0x10061eea0>, bindings: value=selection.myProperty}

最后一个显然是抛出异常的那个。我通常可以直接从绑定值或从错误发生之前建立的其他一些绑定中找出它是哪个视图。另一件有用的事情是检查违规对象的superviewcontrolView,例如在上面的示例中使用po [0x10061eea0 controlView]