2010-07-05 5 views
0

Cette question est essentiellement l'inverse de cette autre question: Calling Python from Objective-CAppel d'Objective-C personnalisé à partir d'une application pyobjc?

J'ai mis ma logique d'application iPhone en Objective-C (évidemment), et je tente maintenant de réutiliser autant que possible de mon projet Xcode le composant serveur à enregistrer en double implémentation. J'ai réussi à charger le modèle de données CoreData à partir de Python, mais je ne vois pas comment appeler réellement la logique Objective-C à partir de Python. Fondamentalement, j'essaie d'accéder aux classes et méthodes Objective-C dans mon projet iPhone à partir de Python pour me sauver duplication de toutes les implémentations.

Est-ce que c'est même vaguement possible, ou est-ce que l'implémentation dupe est la seule solution ici? On dirait que Boost :: Python pourrait être utilisé, mais je ne suis pas vraiment sûr.

edit: Boost :: Python ne fonctionnera pas car il est basé sur C++ et j'ai besoin d'Objective-C. Je savais qu'il y avait une raison pour laquelle ça ne marchait pas.

Répondre

1

Si votre code Objective-C est dans un cadre et que vous souhaitez écrire essentiellement une application Python qui utilise votre cadre, vous pouvez utiliser objc.loadBundle, puis utilisez objc.lookUpClass ou NSClassFromString pour accéder à vos classes. De là, vous pouvez utiliser vos classes comme n'importe quelle autre classe Objective-C.

Si vous exécutez votre code Python dans un processus qui a déjà le runtime Objective-C et que vos classes sont déjà enregistrées, vous pouvez ignorer l'étape loadBundle.

+0

Merci pour la réponse Joseph. Je pense que je dois charger manuellement le paquet puisque le projet d'iPhone est complètement séparé du serveur de pyobjc excepté le defn de modèle de données de .momd que j'ai manuellement copié. Désolé pour la question noob, mais où trouverais-je le bundle construit par XCode pour le projet iPhone? J'ai regardé dans my_project/build et il y a quelques trucs dedans qui semblent avoir été compilés pour iOS plutôt qu'OSX, donc je ne sais pas si ça marchera si j'essaye de le charger sur le serveur (qui fonctionne sur OSX, évidemment). – glenc

+0

Vous devez créer une nouvelle cible de génération qui crée un ensemble ou une structure Mac OS X à l'aide du code qui sera compilé sur le Mac. Si vous avez besoin d'aide, vous devriez poser une autre question, car c'est plus spécifique à Xcode qu'autre chose. –

+0

Merci pour votre aide Joseph, je vais reprendre le problème XCode dans une nouvelle question – glenc

Questions connexes