python函数回调_对pyobjc使用python函数回调?

在尝试使用Python生成的Objective-C类时遇到问题,Objective-C无法调用Python函数。文章通过示例代码展示了如何在Objective-C中调用Python回调函数,包括创建PythonCallback类,设置回调方法,并在Objective-C中调用这些方法。然而,目前遇到了Segmentation fault错误,因为Objective-C找不到Python中定义的方法。寻求解决方案。
摘要由CSDN通过智能技术生成

我正试图使用一个用Python生成的objective-c类来实现这一点,但是objective-c不能调用调用Python函数的方法。

这是目标C代码的框架代码:

//

// scalelib.h

// Scalelib Cocoa Framework

//

// Created by Matthew Mitchell on 04/07/2010.

// Copyright 2010 __MyCompanyName__. All rights reserved.

//

#import

@interface Game : NSObject {

id current_pyfunc;

}

-(void) addPyFunc: (id) pyfunc;

-(void) callPyFunc;

@end

//

// scalelib.m

// Scalelib Cocoa Framework

//

// Created by Matthew Mitchell on 04/07/2010.

// Copyright 2010 __MyCompanyName__. All rights reserved.

//

#import "Game.h"

@implementation Game

-(void) addPyFunc: (id) pyfunc{

current_pyfunc = pyfunc;

}

-(void) callPyFunc{

[current_pyfunc call]; //Segmentation fault. Method doesn't exist for some reason.

}

@end

下面是python脚本,它加载框架,并在失败的情况下测试回调的使用。

#!/usr/bin/env python2.3

from objc import *

import os,sys

loadBundle("Scalelib Cocoa Framework",globals(),os.path.dirname(sys.argv[0]) + "/Scalelib Cocoa Framework/build/Release/Scalelib Cocoa Framework.framework/")

class PythonCallback(NSObject):

def setCallback_withArgs_(self, python_function,args): #Python initialisation of class, add the callback function and arguments

self.python_function = python_function

self.args = args

return self

def call(self): #Used by Objective-C to call python function

self.python_function(*self.args)

def create_callback(function,args):

return PythonCallback.alloc().init().setCallback_withArgs_(function,args)

def square(num):

print num**2

instance = Game.alloc().init()

callback = create_callback(square,[3])

callback.call()

instance.addPyFunc_(create_callback(square,[5]))

instance.callPyFunc()

我得到输出:

分段故障

分段错误是因为在python中所做的调用方法显然不存在。那么我如何使它存在于目标C中呢?

即使代码确实有效,它也将是无用的,但我现在只是在测试东西。一旦回调工作正常,我就可以为Python创建库了。

谢谢你的帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值