Question

Par exemple, http://developer.apple.com/cocoa/pyobjc.html est toujours pour OS X 10.4 Tiger, pas 10.5 Leopard.Et c'est la documentation officielle d'Apple à ce sujet.

La page officielle de PyObjC est tout aussi mauvaise, http://pyobjc.sourceforge.net/

C'est tellement mauvais que c'en est déroutant..J'envisage d'apprendre Ruby principalement parce que les éléments de RubyCocoa sont bien mieux documentés et qu'il existe de nombreux didacticiels décents (http://www.rubycocoa.com/ par exemple), et à cause de la boîte à outils Shoes GUI.

Même ce tutoriel japonais mal traduit automatiquement est plus utile que le reste de la documentation que j'ai pu trouver.

Tout ce que je veux faire, c'est créer des applications Python assez simples avec l'interface graphique Cocoa.
Quelqu'un peut-il faire la lumière sur cette horrible documentation, ou m'indiquer des tutoriels qui ne se contentent pas de vous donner d'énormes blocs de code et supposent que vous savez quoi NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None) fait..?

Était-ce utile?

La solution

Je suis d'accord que ce tutoriel est défectueux, jetant du code aléatoire et inexpliqué juste devant vos yeux.Il introduit des concepts tels que le pool de libération automatique et les valeurs par défaut de l'utilisateur sans expliquer pourquoi vous les souhaiteriez ("le pool de libération automatique pour la gestion de la mémoire" n'est guère une explication).

Cela dit…

en gros, tout ce que je veux faire, c'est écrire des applications Cocoa sans avoir à apprendre ObjC.

J'ai peur que pour le moment, tu volonté besoin d'une compréhension de base d'ObjC afin de bénéficier de tout langage utilisant Cocoa.PyObjC, RubyCocoa, Nu et autres sont au mieux des niches, et tous ont été développés par des personnes intimement familiarisées avec les tenants et les aboutissants d'ObjC. et Cacao.

Pour l'instant, vous en bénéficierez le plus si vous considérez de manière réaliste ces ponts comme utiles là où les langages de script brillent vraiment, plutôt que d'essayer de créer une application complète avec eux.Alors que ce a été fait (avec LimeChat, j'utilise actuellement une application écrite par RubyCocoa), c'est rare et le sera probablement pendant un certain temps.

Autres conseils

La principale raison du manque de documentation pour PyObjC est qu'il n'y a qu'un seul développeur (moi), et comme la plupart des développeurs, je n'aime pas particulièrement écrire de la documentation.Parce que PyObjC est un projet parallèle pour moi, j'ai tendance à me concentrer sur le travail sur les fonctionnalités et les corrections de bugs, car c'est plus intéressant pour moi.

La meilleure façon d'améliorer la documentation est de vous porter volontaire pour aider sur la liste de diffusion pyobjc-dev.

En aparté:la liste de diffusion pythonmac-sig (voir Google) est une excellente ressource pour obtenir de l'aide sur Python sur MacOSX (pas seulement PyObjC).

Pour être franc:

Si vous voulez devenir un programmeur Cocoa efficace, vous devez apprendre Objective-C.Fin de l'histoire.

Ni Python ni Ruby ne remplacent Objective-C via leurs ponts respectifs.Vous devez encore comprendre les API Objective-C, les comportements inhérents aux classes dérivées de NSObject et bien d'autres détails de Cocoa.

PyObjC et RubyCocoa sont un excellent moyen d'accéder aux fonctionnalités Python ou Ruby à partir d'une application Cocoa, notamment en créant une application Cocoa principalement, sinon entièrement, en Python ou Ruby.Mais le succès repose sur une compréhension approfondie de Cocoa et des API Objective-C qui le composent.

La réponse de Tom et Martin est tout à fait vraie (dans presque tous les projets open source, vous constaterez que la plupart des contributeurs sont particulièrement intéressés par, eh bien, développement;pas tellement dans des domaines semi-liés tels que la documentation), mais je ne pense pas que votre question particulière à la fin s'intégrerait bien dans la documentation PyObjC.

NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None)

NSThread fait partie de l'API Cocoa, et en tant que tel documenté chez Apple, y compris la méthode particulière + detachNewThreadSelector:toTarget:withObject: (Je créerais un lien là-bas, mais apparemment, stackoverflow a des bugs lors de son analyse).Le wiki CocoaDev a aussi un article.

Je ne pense pas que ce serait une bonne idée que PyObjC tente de documenter Cocoa, à part quelques exemples de base sur la façon de l'utiliser depuis Python.Expliquer les sélecteurs est également probablement en dehors de la portée de PyObjC, car ceux-ci sont également une fonctionnalité d'Objective-C, pas spécifiquement de PyObjC.

Je suis tombé sur un bon tutoriel sur PyObjC/Cocoa :

http://lethain.com/entry/2008/aug/22/an-epic-introduction-to-pyobjc-and-cocoa/

Tout ce que je veux faire, c'est créer des applications Python assez simples avec l'interface graphique Cocoa.Quelqu'un peut-il faire la lumière sur l'horrible documentation, ou m'indiquer des didacticiels qui ne se contentent pas de vous donner d'énormes blocs de code et de supposer que vous savez ce que fait NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None) .. ?

[...]

en gros, tout ce que je veux faire, c'est écrire des applications Cocoa sans avoir à apprendre ObjC.

Bien que je sois fondamentalement d'accord avec la réponse de Soeren, j'irais encore plus loin :

Il vous faudra beaucoup de temps, voire jamais, avant de pouvoir utiliser Cocoa sans une certaine compréhension de l'Objectif C.Cocoa n'est pas une abstraction construite indépendamment de l'Objectif C, il y est explicitement lié.Vous pouvez le voir dans l'exemple de ligne de code que vous avez cité ci-dessus :

NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None) 

C'est la manière Python d'écrire la ligne Objective C :

[NSThread detachNewThreadSelector:@selector(queryController:) toTarget:self withObject:nil];

Maintenant, il est important de remarquer ici que cette ligne peut être vue de deux manières :(1) en tant que ligne de l'Objectif C, ou (2) en tant qu'invocation des frameworks Cocoa.Nous le voyons comme (1) par la syntaxe.Nous le voyons comme (2) en reconnaissant que NSThread est un framework Cocoa qui fournit un ensemble de fonctionnalités pratiques.Dans ce cas, ce framework Cocoa particulier nous permet de faire en sorte qu'un objet commence facilement à faire quelque chose sur un nouveau thread.

Mais le truc, c'est ça :Le framework Cocoa ici (NSThread) nous fournit ce service pratique d'une manière qui est explicitement liée au langage dans lequel le framework a été écrit.À savoir, NSThread nous a donné une fonctionnalité qui fait explicitement référence aux « sélecteurs ».Les sélecteurs sont, en fait, le nom de quelque chose de fondamental sur le fonctionnement d’Objective C.

Voilà donc le problème.Cocoa est fondamentalement une création Objective-C, et ses créateurs l'ont construit en pensant à Objective C.Je ne prétends pas qu'il est impossible de traduire l'interface des fonctionnalités de Cocoa sous une forme plus naturelle pour d'autres langages.C'est juste que dès que vous modifiez le framework Cocoa pour arrêter de faire référence aux "sélecteurs", ce n'est plus vraiment le framework Cocoa.C'est une version traduite.Et une fois que vous commencez à emprunter cette voie, je suppose que les choses deviennent vraiment compliquées.Vous essayez de suivre Apple lors de la mise à jour de Cocoa, peut-être avez-vous touché certaines parties de Cocoa qui ne se traduisent tout simplement pas bien dans la nouvelle langue, peu importe.Au lieu de cela, des éléments comme PyObjC choisissent d'exposer Cocoa directement, d'une manière qui a une corrélation très claire et simple.Comme on dit dans la documentation :

Afin d'avoir une traduction sans perte et sans ambiguïté entre les messages Objective-C et les méthodes Python, l'équivalent du nom de la méthode Python est simplement le sélecteur avec les deux-points remplacés par des traits de soulignement.

Bien sûr, c'est un peu moche, et cela signifie que vous devez connaître quelque chose sur Objective-C, mais c'est parce que l'alternative, si elle existe vraiment, n'est pas nécessairement meilleure.

Je ne connaissais absolument rien à Objective C ou à Cocoa (mais beaucoup à Python), mais j'écris maintenant une application assez complexe dans PyObjc.Comment ai-je appris ?j'ai pris Programmation Cocoa pour OSX et j'ai parcouru tout le livre (un processus assez rapide) en utilisant PyObjC.Ignorez tout ce qui concerne la gestion de la mémoire et tout ira bien.Le seul bémol est que très occasionnellement, vous devez utiliser un décorateur comme endSheetMethod (en fait, je pense que c'est le seul que j'ai touché) :

@PyObjcTools.AppHelper.endSheetMethod
def alertEnded_code_context_(self, alert, choice, context):
    pass

Cette réponse ne sera pas très utile mais, en tant que développeur, je déteste faire de la documentation.S'agissant d'un projet open source, il est difficile de trouver des personnes pour faire de la documentation.

Tom dit vraiment tout.De nombreux projets open source ont des développeurs dédiés et peu sont intéressés par la documentation.Le fait que les objectifs peuvent changer quotidiennement, ce qui signifie que la documentation doit non seulement être créée, mais également maintenue, n'aide pas à cela.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top