【问题标题】:BWSplitView and PyObjcBWSplitView 和 PyObjc
【发布时间】:2009-05-15 17:24:04
【问题描述】:

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

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

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

【问题讨论】:

    标签: python cocoa pyobjc bwtoolkit


    【解决方案1】:

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

    【讨论】:

    • 以及(您的应用程序包)/Contents/Frameworks 中的特定于应用程序的框架。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我们也有类似的信息:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多