我正在通过Hillegass的书“ Mac OS-X的Cocoa编程”中的示例进行工作。在很多情况下,我一直在研究的示例应用程序启动时,会收到诸如:
的消息。2009-03-11 00:39:19.167 CarLot [7517:10b]无法从_NSControllerObjectProxy类的对象<_nscontrollerobjectproxy>创建NSData
我发现解决此类问题的唯一方法是,认真研究接口构建器中的所有绑定和属性,以查看我错过了某些配置的地方-这都需要时间!
是否有更有效的方法来根据错误消息确定问题所在?您可以使用任何调试技术来跟踪此类问题吗?
Apple的Dev网站上有一篇有关绑定问题排查的精彩文章。
关键要点?有一个名为NSBindingDebugLogLevel
的设置,可用于获取调试信息。
两种设置方式:
1-永久保留为默认值
默认写com.yourdomain.yourapplication NSBindingDebugLogLevel 1
2-调试时将其作为参数传递
路径/到/您的/应用-NSBindingDebugLogLevel 1
我不确定除了在Interface Builder本身中,没有其他方法可以汇总已设置的绑定和属性。据我所知,这是唯一显示此信息的gui。您可以尝试在调试器中运行您的应用程序并打破异常(-[NSException提高]),以查看是否至少可以跟踪哪个对象正在给您此错误,这可能有助于您在IB中找到错误的连接。
如果您的应用程序足够小并且可以快速构建,并且您刚开始使用IB和绑定,我建议您建立一个连接并对其进行测试以查看其是否有效,然后继续进行下一个连接。这样,您将知道导致问题的连接或属性。
我希望有人能提供比这更好的答案,但是据我所知,没有一种工具可以用来验证和查明IB连接问题。
如果您以编程方式而不是在interfacebuilder中进行绑定怎么办?
为此,您必须使用此NSObject方法:
- (void)bind:(NSString *)binding toObject:(id)observableController withKeyPath:(NSString *)keyPath options:(NSDictionary *)options
起初我没有注意到的一件事是,如果您查看对象的连接检查器,它会显示绑定到的所有内容的漂亮列表,如果将鼠标悬停在某个项目上,它将突出显示其对应的元素。
对于再次将某些内容绑定到表列时非常有用。