【问题标题】:Cocoa - Suggested techniques for debugging binding problems between Xcode and Interface BuilderCocoa - 用于调试 Xcode 和 Interface Builder 之间的绑定问题的建议技术
【发布时间】:2009-03-16 15:47:20
【问题描述】:

我正在研究 Hillegass 的“Mac OS-X 的 Cocoa 编程”一书中的示例。有几次我一直在处理的示例应用程序启动时,我收到一条消息,例如:

2009-03-11 00:39:19.167 CarLot[7517:10b] 无法从 _NSControllerObjectProxy 类的对象 <_nscontrollerobjectproxy:> 创建 NSData

我发现解决此类问题的唯一方法是煞费苦心地检查界面构建器中的所有绑定和属性,以查看我错过了某些配置的位置 - 这一切都需要时间!

有没有更有效的方法可以从错误消息中确定问题所在?是否有任何调试技术可以用来追踪此类问题?

【问题讨论】:

标签: objective-c cocoa interface-builder


【解决方案1】:

Apple 的开发网站上有一篇精彩的文章,介绍了绑定故障排除。

https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CocoaBindings/Concepts/Troubleshooting.html

关键要点?有一个名为 NSBindingDebugLogLevel 的设置可用于获取调试信息。

两种设置方式:

1 - 永久保存在您的默认值中

默认写入 com.yourdomain.yourapplication NSBindingDebugLogLevel 1

2 - 在调试时将其作为参数传递

path/to/your/app -NSBindingDebugLogLevel 1

【讨论】:

    【解决方案2】:

    This Article 对此进行了非常简短的讨论。

    基本上,它表明您可以查看 Xib 文件以更快地找出您在应用中设置的绑定。

    希望有帮助!

    【讨论】:

    【解决方案3】:

    我不确定除了在 Interface Builder 本身中设置的绑定和属性的摘要之外,还有其他方法。据我所知,这是显示此信息的唯一 gui。您可以尝试在调试器中运行您的应用程序并打破异常 (-[NSException raise]) 以查看您是否至少可以跟踪哪个对象给您此错误,这可能有助于您在 IB 中找到错误的连接。

    如果您的应用程序足够小并且构建速度很快,并且您刚刚开始使用 IB 和绑定,我建议您建立一个连接并对其进行测试以查看它是否有效,然后继续进行下一个连接。这样您就可以知道是哪个连接或属性导致了问题。

    我希望有人有比这更好的答案,但据我所知,没有工具可以验证和查明 IB 连接问题。

    【讨论】:

      【解决方案4】:

      如果您以编程方式进行绑定而不是在 interfacebuilder 中进行绑定会怎样?

      要做到这一点,你必须使用 NSObject 的这个方法:

      - (void)bind:(NSString *)binding toObject:(id)observableController withKeyPath:(NSString *)keyPath options:(NSDictionary *)options

      【讨论】:

        【解决方案5】:

        一开始我没有注意到的一件事是,如果您查看对象的连接检查器,它会显示一个很好的列表,其中列出了它所绑定的所有内容,如果您将鼠标悬停在一个项目上,它会突出显示其对应的元素.

        当您再次将某些内容绑定到表格列时,这很好。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-21
          • 2018-06-05
          • 2011-10-18
          • 2017-02-06
          • 1970-01-01
          • 2015-02-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多