10

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

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

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

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

4

5 回答 5

13

Apple 的 Dev Site 上有一篇精彩的文章,介绍了绑定故障排除。

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

于 2010-01-23T06:57:14.657 回答
3

本文非常简要地讨论了这一点。

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

希望有帮助!

于 2009-03-17T05:07:52.773 回答
1

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

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

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

于 2009-03-16T18:24:24.893 回答
0

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

为此,您必须使用 NSObject 的这个方法:

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

于 2009-03-17T08:58:48.957 回答
0

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

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

于 2009-04-06T05:32:54.417 回答