Pergunta

Por exemplo, http://developer.apple.com/cocoa/pyobjc.html ainda é para OS X 10.4 Tiger, não 10.5 Leopard.E essa é a documentação oficial da Apple.

A página oficial do PyObjC é igualmente ruim, http://pyobjc.sourceforge.net/

É tão ruim que chega a ser desconcertante..Estou pensando em aprender Ruby principalmente porque o material do RubyCocoa está muito melhor documentado e há muitos tutoriais decentes (http://www.rubycocoa.com/ por exemplo) e por causa do kit de ferramentas Shoes GUI.

Até este tutorial em japonês mal traduzido automaticamente é mais útil do que o resto da documentação que pude encontrar.

Tudo o que quero fazer é criar aplicativos Python bastante simples com Cocoa GUI.
Alguém pode esclarecer a documentação horrível ou me indicar alguns tutoriais que não apenas fornecem enormes blocos de código e presumem que você sabe o que NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None) faz..?

Foi útil?

Solução

Concordo que esse tutorial é falho, jogando código aleatório e inexplicável bem na sua frente.Ele apresenta conceitos como pool de liberação automática e padrões do usuário sem explicar por que você os deseja ("pool de liberação automática para gerenciamento de memória" dificilmente é uma explicação).

Dito isto…

basicamente tudo que quero fazer é escrever aplicativos Cocoa sem precisar aprender ObjC.

Receio que, por enquanto, você vai precisa de um conhecimento básico de ObjC para se beneficiar de qualquer linguagem que use Cocoa.PyObjC, RubyCocoa, Nu e outros são, na melhor das hipóteses, nichos, e todos eles foram desenvolvidos por pessoas intimamente familiarizadas com os meandros do ObjC. e Cacau.

Por enquanto, você se beneficiará mais se considerar realisticamente essas pontes como úteis onde as linguagens de script realmente brilham, em vez de tentar construir um aplicativo inteiro com elas.Enquanto isso tem feito (com o LimeChat, estou usando um aplicativo escrito em RubyCocoa agora), é raro e provavelmente será por um tempo.

Outras dicas

A principal razão para a falta de documentação para PyObjC é que existe um desenvolvedor (eu) e, como a maioria dos desenvolvedores, não gosto particularmente de escrever documentação.Como PyObjC é um projeto paralelo para mim, costumo me concentrar em trabalhar em recursos e correções de bugs, porque isso é mais interessante para mim.

A melhor maneira de melhorar a documentação é se voluntariar para ajudar na lista de discussão pyobjc-dev.

Como um aparte:a mailinglist pythonmac-sig (veja google) é um excelente recurso para obter ajuda sobre Python no MacOSX (não apenas PyObjC).

Para ser franco:

Se você quer ser um programador Cocoa eficaz, você deve aprender Objective-C.Fim da história.

Nem Python nem Ruby são substitutos do Objective-C por meio de suas respectivas pontes.Você ainda precisa entender as APIs do Objective-C, os comportamentos inerentes às classes derivadas do NSObject e muitos outros detalhes do Cocoa.

PyObjC e RubyCocoa são uma ótima maneira de acessar a funcionalidade Python ou Ruby a partir de um aplicativo Cocoa, incluindo a construção de um aplicativo Cocoa principalmente - se não inteiramente - em Python ou Ruby.Mas o sucesso nisso se baseia em um conhecimento profundo do Cocoa e das APIs Objective-C que o compõem.

As respostas de Tom e Martin são definitivamente verdadeiras (em praticamente qualquer projeto de código aberto, você descobrirá que a maioria dos colaboradores está particularmente interessada em, bem, em desenvolvimento;não tanto em assuntos semi-relacionados, como documentação), mas não acho que sua pergunta específica no final se encaixaria bem na documentação do PyObjC.

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

NSThread faz parte da API Cocoa e, como tal documentado na Apple, incluindo o método específico + detachNewThreadSelector:toTarget:withObject: (Eu colocaria um link lá, mas aparentemente o stackoverflow tem bugs ao analisá-lo).Wiki CocoaDev também tem um artigo.

Não acho que seria uma boa ideia o PyObjC tentar documentar o Cocoa, além de alguns exemplos básicos de como usá-lo no Python.Explicar os seletores provavelmente também está fora do escopo do PyObjC, já que eles também são um recurso do Objective-C, não do PyObjC especificamente.

Me deparei com um bom tutorial sobre PyObjC/Cocoa:

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

Tudo o que quero fazer é criar aplicativos Python bastante simples com Cocoa GUI.Alguém pode esclarecer a documentação horrível ou me indicar alguns tutoriais que não apenas fornecem enormes blocos de código e presumem que você sabe o que NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None) faz ..?

[...]

basicamente tudo que quero fazer é escrever aplicativos Cocoa sem precisar aprender ObjC.

Embora eu basicamente concorde com a resposta de Soeren, eu iria ainda mais longe:

Levará muito tempo, ou nunca, até que você possa usar Cocoa sem algum conhecimento do Objetivo C.Cocoa não é uma abstração construída independentemente do Objetivo C, está explicitamente ligada a ele.Você pode ver isso na linha de código de exemplo citada acima:

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

Esta é a maneira Python de escrever a linha Objective C:

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

Agora, é importante notar aqui que esta linha pode ser vista de duas maneiras:(1) como uma linha do Objetivo C, ou (2) como uma invocação das estruturas do Cacau.Vemos isso como (1) pela sintaxe.Vemos isso como (2) ao reconhecer que NSThread é uma estrutura Cocoa que fornece um conjunto de recursos úteis.Nesse caso, essa estrutura específica do Cocoa está facilitando para que um objeto comece a fazer algo em um novo thread.

Mas o chute é este:A estrutura Cocoa aqui (NSThread) está nos fornecendo este serviço útil de uma forma que está explicitamente ligada à linguagem na qual a estrutura foi escrita.Ou seja, NSThread nos deu um recurso que se refere explicitamente a “seletores”.Os seletores são, na verdade, o nome de algo fundamental sobre como o Objetivo C funciona.

Então aí está o problema.Cocoa é fundamentalmente uma criação do Objective-C, e seus criadores o construíram com o Objective C em mente.Não estou afirmando que seja impossível traduzir a interface dos recursos do Cocoa em uma forma mais natural para outros idiomas.Acontece que assim que você altera a estrutura do Cocoa para parar de se referir a "seletores", ela não é mais a estrutura do Cocoa.É uma versão traduzida.E quando você começa a seguir esse caminho, acho que as coisas ficam muito complicadas.Você está tentando acompanhar a Apple enquanto eles atualizam o Cocoa, talvez você tenha atingido algumas partes do Cocoa que simplesmente não se traduzem bem para o novo idioma, tanto faz.Então, em vez disso, coisas como PyObjC optam por expor Cocoa diretamente, de uma forma que tenha uma correlação muito clara e simples.Como dizem na documentação:

Para ter uma tradução sem perdas e inequívoca entre mensagens Objective-C e métodos Python, o nome do método Python equivalente é simplesmente o seletor com dois pontos substituídos por sublinhados.

Claro, é um pouco feio e significa que você precisa saber algo sobre Objective-C, mas isso ocorre porque a alternativa, se realmente existir, não é necessariamente melhor.

Eu não sabia nada sobre Objective C ou Cocoa (mas bastante sobre Python), mas agora estou escrevendo um aplicativo bastante complexo em PyObjc.Como aprendi?eu peguei Programação Cocoa para OSX e revisei todo o livro (um processo bastante rápido) usando PyObjC.Simplesmente ignore qualquer coisa sobre gerenciamento de memória e você ficará bem.A única ressalva é que muito ocasionalmente você precisa usar um decorador como endSheetMethod (na verdade, acho que foi o único que encontrei):

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

Esta resposta não será muito útil, mas, como desenvolvedor, odeio fazer documentação.Sendo este um projeto de código aberto, é difícil encontrar pessoas para fazer a documentação.

Tom diz tudo realmente.Muitos projetos de código aberto têm desenvolvedores dedicados e poucos interessados ​​em documentar.Não é ajudado pelo fato de que as metas podem mudar diariamente, o que significa que a documentação não só precisa ser criada, mas também mantida.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top