实现PyObjc NsObject子类

1 投票
1 回答
1082 浏览
提问于 2025-04-16 16:46

我有一个Objc-C项目,想通过Python处理一些数据。为此,我决定实现一个PyObjc的NSObject子类,然后通过界面构建器把它链接到我的Obj-C类。

我在项目中添加了Python框架,并创建了一个包含以下简单代码的Python文件:

import objc
from Foundation import *
from AppKit import *

class PythonWrapper(NSObject):
    def applicationDidFinishLaunching_(self, sender):
        NSLog("Application did finish launching.")

我在我的XIB文件中创建了一个PythonWrapper实例(构建器自动识别了它的名字)。但是,在构建时,即使还没有把它链接到其他类,我也遇到了以下问题:

忽略文件 /Developer/SDKs/MacOSX10.6.sdk/Library/Frameworks//Python.framework/Python,因为文件中缺少所需的架构 x86_64

此外,xCode的日志还显示:

未知类 'PythonWrapper',改用 'NSObject'。在路径 /Users/joao/Library/Developer/Xcode/DerivedData/Jalioneiro-ekjwzbkqqgpyekadkyebhgdsjcxo/Build/Products/Debug/Jalioneiro.app/Contents/Resources/en.lproj/Interface.nib 中遇到。

我在这里缺少了什么?有没有其他方法可以将Python代码链接到我的Obj-C类?

注意:我正在使用xCode4

1 个回答

0

我听说Xcode 4和PyObjC的配合不是很好,但我现在还在用3,所以不太确定。

你第二个错误的原因(这也经常让我头疼)是你需要把自定义的类导入到你项目的main.py文件里:

#import modules required by application
import objc
import Foundation
import AppKit

from PyObjCTools import AppHelper

# import modules containing classes required to start application and load MainMenu.nib
import MyAppDelegate
import MyCustomView
import MyArrayController

# pass control to AppKit
AppHelper.runEventLoop()

第一个错误看起来是你在尝试构建一个只支持64位的应用程序。而随Snow Leopard一起发布的PyObjC只编译成了32位(其实我觉得默认的Python也是这样)。你可以试着把目标的构建架构改成32位或者32/64位通用版。你也可以尝试重新编译PyObjC并把它包含在你应用的包里——不过我自己还没试过。

撰写回答