2009-07-26 7 views
3

Je veux passer un point à un objet C++ au sélecteur appelé en utilisant performSelectorOnMainThread. Le simple fait de lancer le pointeur sur un 'id' (objc_object *) ne semble pas fonctionner. Je pourrais toujours écrire ma propre classe de wrapper Objective C, mais il devrait y avoir une manière assez standard de le faire. Cependant, je n'ai pas vraiment trouvé quelque chose sur la documentation d'Apple.Passer un pointeur natif à l'argument withObject de execSelectorOnMainThread?

Quelle est la meilleure façon de faire cela?

Voici ce que je veux faire:

... 
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]; 
... 

Merci!

Répondre

5

Pas besoin de faire votre propre classe d'emballage; [NSValue valueWithPointer:] est conçu pour les pointeurs de boxe. Faites en sorte que someMethod prenne un NSValue plutôt qu'un pointeur brut, puis extrayez le pointeur avec pointerValue.

(je crois que les méthodes performSelector * conservent leurs arguments afin que l'objet est garanti pour durer grâce à l'appel, ce qui est la raison pour laquelle vous ne pouvez pas jeter une valeur aléatoire à un id dans cet argument.)

+0

Cela semble correct - mais pour moi, cela a toujours fonctionné pour simplement transcrire des pointeurs non-objets en identifiant. Je suppose que je suis sur de la glace mince;) – Till

Questions connexes