3

我正在尝试在 Cocoa PyObjc 项目中使用来自 BWToolkit 的 Brandon Walkin 的 BWSplitView。当我运行项目时,我收到以下错误消息:

NSInvalidUnarchiveOperationException - *** -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (BWSplitView)

这是否意味着他的工具包与 PyObc 项目不兼容,所以我应该只使用默认的界面构建器视图?BWToolkit 似乎非常适合我的程序,我计划在界面的其他地方使用它。

4

3 回答 3

5

我怀疑您收到该错误是因为您在尝试加载的 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 中,应用程序特定的框架放在 Contents/Frameworks 中,在应用程序的应用程序包中。

于 2009-05-15T17:51:02.250 回答
0

我已经使用以下步骤解决了这个问题:
1. 下载并安装http://github.com/jrydberg/pyobjc-bwtoolkitframework/tree/master
2. 确保您在 /System/Library/Frameworks 中安装了 BWToolkit.framework(这可以通过重新下载 BWToolkit 并复制文件夹来完成)
3. 在 main.py 中使用 import BWToolkitFramework

于 2009-05-15T17:42:51.893 回答
0

我们收到了类似的信息:

*** Terminating app due to uncaught exception ‘NSInvalidUnarchiveOperationException’, reason: ‘*** -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (MKMapView)’

在我们的例子中,这是由于目标构建设置下的“框架搜索路径”设置中的一个杂散条目。清除该条目后,问题就消失了。

于 2009-11-20T03:20:31.113 回答