Cocoa-用于调试Xcode和Interface Builder之间的绑定问题的建议技术

问题描述 投票:10回答:5

我正在通过Hillegass的书“ Mac OS-X的Cocoa编程”中的示例进行工作。在很多情况下,我一直在研究的示例应用程序启动时,会收到诸如:

的消息。

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

我发现解决此类问题的唯一方法是,认真研究接口构建器中的所有绑定和属性,以查看我错过了某些配置的地方-这都需要时间!

是否有更有效的方法来根据错误消息确定问题所在?您可以使用任何调试技术来跟踪此类问题吗?

objective-c cocoa interface-builder
5个回答
3
投票

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

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

希望有帮助!


12
投票

Apple的Dev网站上有一篇有关绑定问题排查的精彩文章。

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

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

两种设置方式:

1-永久保留为默认值

默认写com.yourdomain.yourapplication NSBindingDebugLogLevel 1

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

路径/到/您的/应用-NSBindingDebugLogLevel 1


1
投票

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

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

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


0
投票

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

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

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


0
投票

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

对于再次将某些内容绑定到表列时非常有用。

© www.soinside.com 2019 - 2024. All rights reserved.