现有应用程序中的python和objc桥

2024-04-19 19:19:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近开始在objc中编程,我在想如何在现有的objc应用程序中使用python代码。我在这个网站上找到了一些线索,但它们根本帮不了我。我要做的是获取在apple's developer website中找到的SpotlightAPI并使用结果用python代码处理它们。到目前为止,我已经完成了以下工作:
1。从apple下载了SpotlightAPI
2。基于PyObjc
3中的cocoa python应用程序模板创建了一个新项目。将控制器文件从SpotlightAPI添加到PyObjC
4。按照SpotlightAPI
5中的方式配置绑定。执行程序并成功完成所有工作
6。创建了一个从NSObject继承的新python类文件(称为python.py)
7。python文件包含以下代码:

from Foundation import *
import objc

NSObject = objc.lookUpClass(u"NSObject")
print "PYTHON VERSION BEING USED:"

class Python(NSObject):
    def sendit_(self, something):
        print something
        return "asdf"


8我在Controller.m文件的开头插入了以下代码:

^{pr2}$


9在Controller.h文件的变量声明中添加了id *myPython;
10在controller.m文件中实现了sendit方法,如下所示:

- (NSString *) sendit:(id) aString
{

    return [myPython sendit:aString];
}


它编译并成功运行,但是我从init函数得到的控制台消息是:Created PythonClass: (null),下一个日志的字符串返回是(null)
有人知道我做错什么了吗?在


Tags: 文件代码importid应用程序applereturnsomething
1条回答
网友
1楼 · 发布于 2024-04-19 19:19:21

你列出的代码中有一些可疑的地方。首先,您应该使用id myPython而不是{},因为id已经是一个指针。第二,在NSString类别上声明一个方法,但在子类中实现它。通常,您希望在同一个类(在本例中为NSObject)上的类别实现中实现该方法。第三,将sendit作为NSObject上的一个方法有点循环,当实现时,它在myPython上调用sendit,myPython也是NSObject。我很惊讶它能编译而且不会崩溃。试着清理这些问题,看看你能得到什么。希望这有帮助!在

相关问题 更多 >