J'implémente un protocole ObjC en tant que mix-in pour une classe PyObjC.PyObjC et renvoyer les paramètres 'out' (c'est-à-dire NSError **)
Ce protocole définit un paramètre 'out'.
Je suis incapable de trouver une bonne documentation sur la façon dont une classe Python qui implémente un protocole ObjC définissant ceci doit se comporter.
J'ai trouvé ceci mailing list thread mais la suggestion dedans ne fonctionne pas. Ils disent de retourner une liste Python avec la valeur de retour de la méthode en tant que premier élément et le paramètre out en tant que deuxième.
J'ai essayé ceci et tout ce que je reçois est une exception lors de l'appel de ObjC (<type 'exceptions.ValueError'>: depythonifying 'char', got 'tuple'
).
Il semble que PyObjC adhère strictement au protocole ObjC dans les arguments de méthode depythonifying, ce qui est bien, mais cela ne m'aide pas à essayer de modifier un paramètre out.
C'est le protocole ObjC:
#import <Foundation/Foundation.h>
@protocol TestProtocol <NSObject>
- (BOOL)testMethod:(NSError **)error;
@end
Ceci est la classe Python mise en œuvre de ce protocole:
from Foundation import *
import objc
NSObject = objc.lookUpClass("NSObject")
TestProtocol = objc.protocolNamed("TestProtocol")
class TestClass(NSObject, TestProtocol):
def testMethod_(self, error):
return True, None
QUESTION: Comment puis-je retourner un ObjC paramètre out en Python?
"PyObjC transmet généralement l'erreur en tant que deuxième élément d'un tuple." Oui, c'est ce que fait ma méthode Python (testMethod_). Mais PyObjC n'adhère pas à cette règle lors de la dépythonisation dans la zone ObjC, et renvoie ensuite une exception. La confusion de toutes les réponses sur Internet que j'ai vues, semble provenir de la distinction entre l'appel de ObjC de Python contre l'appel de Python de ObjC. Je suis intéressé par ce dernier. On ne se comporte pas comme les autres. – firstresponder
Merci bbum. J'ai essayé de créer une classe Stub ObjC et d'en hériter en Python, comme vous l'avez suggéré mais j'ai la même exception ("depythonifying 'char', got 'tuple'"). Connaissez-vous des endroits où je peux trouver de la documentation sur la façon de commencer à jouer avec les technologies de pont? – firstresponder
ugh - bummer. Le meilleur pari est de lire la source. C'est l'une des raisons pour lesquelles je détourne les gens de l'utilisation des ponts pour faire du développement de Cocoa à moins que vous ayez vraiment * vraiment * besoin de mélanger une bibliothèque de la langue désirée .... Désolé je ne pourrais pas être plus utile. – bbum