我正在尝试在Cocoa PyObjc项目中使用来自BWToolkit的Brandon Walkin的BWSplitView.当我运行该项目时,我收到以下错误消息:
NSInvalidUnarchiveOperationException - *** -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (BWSplitView)
这是否意味着他的工具包与PyObc项目不兼容,所以我应该只使用默认的界面构建器视图?BWToolkit似乎非常适合我的程序,我打算在我的界面的其他地方使用它.
我怀疑你得到了这个错误,因为你在尝试加载的nib/xib文件中有一个BWSplitView.为了解压缩nib文件中的对象,运行时需要能够创建存档类的实例(例如BWSplitView).抛出的异常是因为BWSplitView不可用于运行时.在Objective-C应用程序中,您将链接到BWToolkit框架,动态链接器将完成使BWSplitView可用于运行时的工作.在PyObjC应用程序中,您必须显式导入您希望运行时运行的类(未在后台链接的类,例如Cocoa类).幸运的是,BWToolkit有一个桥接支持文件,因此您可以直接导入它(假设它位于标准框架位置,例如/ Library/Frameworks).如果需要加载没有桥支持文件的框架,可以使用objc.loadBundle
然后使用它NSClassFromString
来获取类对象.
另外,/ System/Library/Frameworks保留给Apple提供的系统框架.您不应该将第三方框架放在该文件夹中,因为Apple可能会在系统更新时擦除该文件夹(不太可能,但可能).系统中所有用户可以使用的第三方框架应该放在/ Library/Frameworks中,用户特定的框架类似于〜/ Library/Frameworks和内容/框架中的应用程序特定框架,在应用程序的应用程序包中.