Pregunta

Por ejemplo, http://developer.apple.com/cocoa/pyobjc.html Todavía es para OS X 10.4 Tiger, no 10.5 Leopard.Y esa es la documentación oficial de Apple al respecto.

La página oficial de PyObjC es igualmente mala. http://pyobjc.sourceforge.net/

Es tan malo que resulta desconcertante...Estoy considerando aprender Ruby principalmente porque el material de RubyCocoa está mucho mejor documentado y hay muchos tutoriales decentes (http://www.rubycocoa.com/ por ejemplo), y gracias al kit de herramientas Shoes GUI.

Incluso este tutorial japonés mal traducido automáticamente es más útil que el resto de la documentación que pude encontrar.

Todo lo que quiero hacer es crear aplicaciones Python bastante simples con Cocoa GUI.
¿Alguien puede arrojar luz sobre la horrible documentación o señalarme algunos tutoriales que no solo te brindan enormes bloques de código y asumen que sabes qué? NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None) hace..?

¿Fue útil?

Solución

Estoy de acuerdo en que ese tutorial es defectuoso y arroja código aleatorio e inexplicable frente a tus ojos.Introduce conceptos como el grupo de liberación automática y los valores predeterminados del usuario sin explicar por qué los querrías ("grupo de liberación automática para la gestión de memoria" no es una explicación).

Dicho eso…

Básicamente, todo lo que quiero hacer es escribir aplicaciones Cocoa sin tener que aprender ObjC.

Me temo que por el momento usted voluntad Necesita un conocimiento básico de ObjC para poder beneficiarse de cualquier lenguaje que use Cocoa.PyObjC, RubyCocoa, Nu y otros son, en el mejor de los casos, nichos, y todos ellos fueron desarrollados por personas íntimamente familiarizadas con los entresijos de ObjC. y Cacao.

Por ahora, se beneficiará más si ve de manera realista esos puentes como útiles donde los lenguajes de programación realmente brillan, en lugar de intentar crear una aplicación completa con ellos.Mientras esto tiene Ya se ha hecho (con LimeChat, estoy usando una aplicación escrita por RubyCocoa en este momento), es raro y probablemente lo será por un tiempo.

Otros consejos

La razón principal de la falta de documentación para PyObjC es que hay un desarrollador (yo) y, como a la mayoría de los desarrolladores, no me gusta especialmente escribir documentación.Como PyObjC es un proyecto paralelo para mí, tiendo a centrarme en trabajar en funciones y correcciones de errores, porque eso es más interesante para mí.

La mejor manera de mejorar la documentación es ofrecerse como voluntario para ayudar en la lista de correo de pyobjc-dev.

Como un aparte:la lista de correo pythonmac-sig (ver google) es un recurso excelente para obtener ayuda sobre Python en MacOSX (no solo PyObjC).

Para ser honestos:

Si quieres ser un programador de Cocoa eficaz, debes aprender Objective-C.Fin de la historia.

Ni Python ni Ruby sustituyen a Objective-C a través de sus respectivos puentes.Aún debes comprender las API de Objective-C, los comportamientos inherentes a las clases derivadas de NSObject y muchos otros detalles de Cocoa.

PyObjC y RubyCocoa son una excelente manera de acceder a la funcionalidad de Python o Ruby desde una aplicación Cocoa, incluida la creación de una aplicación Cocoa principalmente (si no completamente) en Python o Ruby.Pero el éxito se basa en una comprensión profunda de Cocoa y las API de Objective-C que lo componen.

La respuesta de Tom y Martin es definitivamente cierta (en casi cualquier proyecto de código abierto, encontrará que la mayoría de los contribuyentes están particularmente interesados ​​en, bueno, desarrollando;no tanto en asuntos semi-relacionados como la documentación), pero no creo que su pregunta particular al final encaje bien dentro de la documentación de PyObjC.

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

NSThread es parte de la API Cocoa y, como tal documentado en Apple, incluido el método particular + detachNewThreadSelector:toTarget:withObject: (Lo vincularía allí, pero aparentemente stackoverflow tiene errores al analizarlo).El wiki de CocoaDev tambien tiene un articulo.

No creo que sea una buena idea que PyObjC intente documentar Cocoa, aparte de algunos ejemplos básicos de cómo usarlo desde Python.Es probable que explicar los selectores también esté fuera del alcance de PyObjC, ya que también son una característica de Objective-C, no específicamente de PyObjC.

Me topé con un buen tutorial sobre PyObjC/Cocoa:

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

Todo lo que quiero hacer es crear aplicaciones Python bastante simples con Cocoa GUI.¿Alguien puede arrojar luz sobre la horrible documentación o indicarme algunos tutoriales que no solo le brindan enormes bloques de código y suponen que sabe lo que hace NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None)...?

[...]

Básicamente, todo lo que quiero hacer es escribir aplicaciones Cocoa sin tener que aprender ObjC.

Aunque básicamente estoy de acuerdo con la respuesta de Soeren, iría aún más lejos:

Pasará mucho tiempo, si es que alguna vez, antes de que puedas usar Cocoa sin tener algún conocimiento del Objetivo C.Cocoa no es una abstracción construida independientemente del Objetivo C, está explícitamente ligada a él.Puede ver esto en la línea de código de ejemplo que citó anteriormente:

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

Esta es la forma en Python de escribir la línea Objective C:

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

Ahora bien, es importante señalar aquí que esta línea se puede ver de dos maneras:(1) como una línea del Objetivo C, o (2) como una invocación de los marcos Cocoa.Lo vemos como (1) por la sintaxis.Lo vemos como (2) al reconocer que NSThread es un marco Cocoa que proporciona un conjunto de funciones útiles.En este caso, este marco Cocoa particular nos facilita que un objeto comience a hacer algo en un nuevo hilo.

Pero el truco es este:El marco Cocoa aquí (NSThread) nos proporciona este útil servicio de una manera que está explícitamente vinculada al lenguaje en el que se escribió el marco.Es decir, NSThread nos brindó una característica que se refiere explícitamente a "selectores".Los selectores son, de hecho, el nombre de algo fundamental sobre cómo funciona Objective C.

Entonces ahí está el problema.Cocoa es fundamentalmente una creación de Objective-C y sus creadores lo crearon teniendo en cuenta Objective C.No estoy afirmando que sea imposible traducir la interfaz de las funciones de Cocoa a una forma más natural para otros idiomas.Es solo que tan pronto como cambias el marco Cocoa para que deje de hacer referencia a "selectores", ya no es realmente el marco Cocoa.Es una versión traducida.Y una vez que empiezas a seguir ese camino, supongo que las cosas se ponen realmente complicadas.Estás tratando de mantenerte al día con Apple mientras actualizan Cocoa, tal vez encuentres algunas partes de Cocoa que simplemente no se traducen bien al nuevo idioma, lo que sea.Entonces, cosas como PyObjC optan por exponer Cocoa directamente, de una manera que tiene una correlación muy clara y simple.Como dicen en la documentación:

Para tener una traducción sin pérdidas y sin ambigüedades entre los mensajes de Objective-C y los métodos de Python, el equivalente del nombre del método de Python es simplemente el selector con dos puntos reemplazados por guiones bajos.

Claro, es un poco feo y significa que necesitas saber algo sobre Objective-C, pero eso se debe a que la alternativa, si realmente existe, no es necesariamente mejor.

No sabía nada sobre Objective C o Cocoa (pero sí mucho sobre Python), pero ahora estoy escribiendo una aplicación bastante compleja en PyObjc.¿Cómo aprendí?Yo recogi Programación Cacao para OSX y revisé todo el libro (un proceso bastante rápido) usando PyObjC.Simplemente ignora todo lo relacionado con la gestión de la memoria y prácticamente estarás bien.La única advertencia es que muy ocasionalmente tienes que usar un decorador como endSheetMethod (de hecho, creo que es el único que he usado):

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

Esta respuesta no será muy útil pero, como desarrollador, odio hacer documentación.Al ser un proyecto de código abierto, es difícil encontrar personas que realicen la documentación.

Tom lo dice todo realmente.Muchos proyectos de código abierto tienen desarrolladores dedicados y pocos están interesados ​​en documentarlos.No ayuda el hecho de que los objetivos puedan cambiar a diario, lo que significa que no sólo hay que crear documentación, sino también mantenerla.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top