Python Objective c ブリッジを使用して見つけたものはすべて読んでいます。私のメイン アプリは Objective C です。この段階では、Python で関数を呼び出せるようにしたいだけです。私が間違っている根本的な何かがあると思いますが、それを見ることができません。ところで、XCode 4 を使用し、Python.framework にリンクして、Lion を実行しています。
バンドル内に、次のような PythonStuff.py というファイルを作成します...
import objc
from Foundation import *
NSObject = objc.lookUpClass('NSObject')
class PythonStuff(NSObject):
def init(self):
self = super(PythonStuff, self).init()
return self
def pySetAString_(self, aString):
#self._whatisit(aNumber)
try:
self.MyString = aString
except:
self.MyString = "blah"
return
次に、次のプロトコルを設定します
#import <Foundation/Foundation.h>
@class PythonStuff;
@interface NSObject (PythonMethods)
-(void) pySetAString:(NSString *) value;
@end
最後に、それを呼び出すには、次のコードを実行します
if( ! Py_IsInitialized() )
Py_Initialize();
PyThreadState *tstate = Py_NewInterpreter();
Class PythonStuffClass = NSClassFromString(@"PythonStuff");
id myPythonStuff;
myPythonStuff = [[PythonStuffClass alloc] init];
[myPythonStuff pySetAString:@"some silly string"];
私が見たいくつかのサンプルから、うまくいくと思っていたでしょうが、なぜうまくいかないのかわかりません. 関数なしで単純な Python クラスをセットアップでき、動作しているように見えます。少なくともエラーは発生しませんが、関数を呼び出そうとすると呼び出しが中止されます。これは、ある種のライブラリのように見えます。 Objective-C または Python インポートとして欠落しています。
Objective-C の例外ハンドラを追加しました。ここにそれが示すものがあります: -
0 objc_exception_throw 4 ffi_closure_SYSV 5 -[EditorViewItem runThread:] 6 [NSThread メイン]