2009-07-26 1 views
3

performSelectorOnMainThreadを使用して呼び出されるセレクタにポイントをC++オブジェクトに渡したいとします。単にポインタを 'id'(objc_object *)にキャストしても動作しないようです。 私はいつも自分の目的のCラッパークラスを書くことができますが、これを行うためのかなり標準的な方法があるはずです。私は実際にそれについてのリンゴのドキュメンテーションで何も見つけませんでした。performSelectorOnMainThreadのwithObject引数にネイティブポインタを渡しますか?

これを行うにはどうすればよいですか?

は、ここで私が何をしたいです:

... 
Foo *foo = new Foo(); // Foo is a C++ class 
MyObject *myObj = [[MyObject alloc] init]; // Obj-C class 
[myObj performSelectorOnMainThread:@selector(someMethod:) withObject:foo waitUntilDone:NO]; 
... 

ありがとう!

答えて

5

独自のラッパークラスを作成する必要はありません。 [NSValue valueWithPointer:]は、ボクシングポインター用に設計されています。 someMethodを生のポインタではなくNSValueにし、pointerValueでポインタを抽出するだけです。

(私はオブジェクトがちょうどその引数のidにランダムな値をキャストすることができない理由で呼び出しを通じて続くことが保証されるようにperformSelector *メソッドは、引数を保持していることを信じています。)

+0

これは正しいと思う - しかし、私にとっては、それは常にIDへの非オブジェクトポインタの型キャストに努めた。私は薄い氷の上にいると思う;) – Till

関連する問題