Подтвердить что ты не робот

Почему документация PyObjC так плоха?

Например, http://developer.apple.com/cocoa/pyobjc.html все еще для OS X 10.4 Tiger, а не 10.5 Leopard.. И что официальная документация Apple для него..

Официальная страница PyObjC одинаково плоха, http://pyobjc.sourceforge.net/

Это так плохо, что это озадачивает. Я рассматриваю возможность изучения Ruby прежде всего потому, что материал RubyCocoa настолько хорошо документирован, и там много достойных учебников (http://www.rubycocoa.com/) и из-за инструментария GUI для обуви.

Даже этот плохо переведенный японский учебник более полезен, чем остальная документация, которую я мог найти.

Все, что я хочу сделать, это создать довольно простые приложения Python с помощью Cocoa GUI..
Может ли кто-нибудь пролить свет на ужасную документацию или указать мне на некоторые уроки, которые не просто дают вам огромные блоки кода и предполагают, что вы знаете, что делает NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None)..?

4b9b3361

Ответ 1

Я согласен, что этот учебник ошибочен, бросая случайный, необъяснимый код прямо перед вашими глазами. Он вводит такие понятия, как пул автозапуска и пользовательские значения по умолчанию, не объясняя, почему вы хотели бы их ( "пул автономии для управления памятью" вряд ли является объяснением).

Это сказало...

В основном все, что я хочу сделать, это написать приложения Cocoa, не изучая ObjC.

Я боюсь, что на данный момент вам потребуется базовое понимание ObjC, чтобы извлечь выгоду из любого языка, который использует Cocoa. PyObjC, RubyCocoa, Nu и другие - это ниши в лучшем случае, и все они были разработаны людьми, глубоко знакомыми с вложениями ObjC и Cocoa.

На данный момент вы выиграете, если вы реалистично увидите эти мосты как полезные, когда языки сценариев по-настоящему сияют, вместо того, чтобы пытаться построить с ними целое приложение. Хотя это было сделано (с LimeChat, я сейчас использую приложение, написанное RubyCocoa), оно редко и вероятно будет на некоторое время.

Ответ 2

Основная причина отсутствия документации для PyObjC заключается в том, что есть один разработчик (я), и, как и большинство разработчиков, мне не особенно нравится писать документацию. Поскольку PyObjC - это побочный проект для меня, я стараюсь сосредоточиться на работе над функциями и исправлениями, потому что это более интересно для меня.

Лучший способ улучшить документацию - добровольно помочь в списке рассылки pyobjc-dev.

В стороне: список рассылки pythonmac-sig (см. google) - это отличный ресурс для получения справки по Python на MacOSX (а не только PyObjC).

Ответ 3

Быть тупым:

Если вы хотите быть эффективным программистом Cocoa, вы должны изучить Objective-C. Конец истории.

Ни Python, ни Ruby не заменяют Objective-C через их соответствующие мосты. Вы все еще должны понимать API Objective-C, поведение, присущее производным классам NSObject, и многие другие детали Cocoa.

PyObjC и RubyCocoa - отличный способ получить доступ к функциям Python или Ruby из приложения Cocoa, включая создание приложения Cocoa в основном - если не полностью - в Python или Ruby. Но успех в нем основан на глубоком понимании API Cocoa и Objective-C, в котором он состоит.

Ответ 4

Ответ Tom и Martin определенно верен (практически в любом проекте с открытым исходным кодом вы обнаружите, что большинство участников особенно заинтересованы в разработке, а не столько в вопросах, связанных с полу, как документация), но я не думайте, что ваш конкретный вопрос в конце будет хорошо вписываться в документацию PyObjC.

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

NSThread является частью API Cocoa и как таковой задокументированный в Apple, включая конкретный метод + detachNewThreadSelector:toTarget:withObject: (Я бы связался там, но, очевидно, у stackoverflow есть ошибки с разбором). В CocoaDev wiki также есть статья.

Я не думаю, что PyObjC неплохо было бы попытаться документировать Cocoa, кроме нескольких базовых примеров использования его из Python. Объяснение селекторов также, вероятно, выходит за рамки PyObjC, так как те же функции являются Objective-C, а не PyObjC.

Ответ 6

Все, что я хочу сделать, это создать довольно простые приложения Python с графическим интерфейсом Cocoa. Может ли кто-нибудь пролить свет на ужасную документацию или указать мне на некоторые уроки, которые не просто дают вам огромные блоки кода и предполагают, что вы знать, что NSThread.detachNewThreadSelector_toTarget_withObject _ ( "queryController", self, None) делает..?

[...]

В основном все, что я хочу сделать, это написать приложения Cocoa, не изучая ObjC.

Хотя я в основном согласен с ответом Soeren, я бы взял его еще дальше:

Это будет долгое время, если когда-либо, прежде чем вы сможете использовать Cocoa без какого-либо понимания Objective C. Cocoa не является абстракцией, построенной независимо от Objective C, она явно привязана к ней. Вы можете увидеть это в строке примера кода, который вы указали выше:

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

Это Python способ записи строки Objective C:

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

Теперь важно заметить, что эту строку можно увидеть двумя способами: (1) как линия Objective C или (2) как вызов фреймворков Cocoa. Мы видим это как (1) по синтаксису. Мы видим это как (2), признавая, что NSThread представляет собой структуру Cocoa, которая предоставляет набор удобных функций. В этом случае эта конкретная инфраструктура Cocoa облегчает нам задачу, когда объект начинает что-то делать в новом потоке.

Но кикер таков: структура Cocoa здесь (NSThread) предоставляет нам эту удобную услугу способом, который явно привязан к языку, на котором была написана инфраструктура. А именно, NSThread дал нам функцию, которая явно относится к "селекторам". Селекторы - это, по сути, название чего-то фундаментального в том, как работает Objective C.

Так что там руб. Cocoa является фундаментальным созданием Objective-C, и его создатели построили его с учетом Objective C. Я не утверждаю, что невозможно перевести интерфейс в функции Cocoa в более естественную для других языков форму. Просто после того, как вы измените структуру Cocoa, чтобы перестать ссылаться на "селектора", это уже не рама Cocoa. Это переведенная версия. И как только вы начнете идти по этой дороге, я предполагаю, что все становится очень грязным. Вы пытаетесь не отставать от Apple, поскольку они обновляют Cocoa, возможно, вы попали в некоторые части Cocoa, которые просто не переводят на новый язык, независимо от того. Таким образом, такие вещи, как PyObjC, позволяют напрямую открывать Cocoa, что имеет очень четкую и простую корреляцию. Как говорится в документации:

Чтобы иметь без потерь и однозначный перевод между сообщениями Objective-C и методами Python, эквивалент имени метода Python - это просто селектор с двоеточиями, замененный символами подчеркивания.

Конечно, это немного уродливо, и это означает, что вам нужно что-то знать о Objective-C, но это потому, что альтернатива, если она действительно существует, не всегда лучше.

Ответ 7

Я ничего не знал о Objective C или Cocoa (но много о Python), но теперь я пишу довольно сложное приложение в PyObjc. Как я узнал? Я взял Cocoa Программирование для OSX и просмотрел всю книгу (довольно быстрый процесс) с помощью PyObjC. Просто игнорируйте что-нибудь об управлении памятью, и вы в значительной степени будете в порядке. Единственное предостережение в том, что очень редко вам приходится использовать декоратор, такой как endSheetMethod (на самом деле я думаю, что единственный, кого я ударил):

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

Ответ 8

Этот ответ не будет очень полезен, но, как разработчик, я ненавижу делать документацию. Это проект с открытым исходным кодом, он трудно найти людей для документации.

Ответ 9

Том говорит на самом деле. Многие проекты с открытым исходным кодом имеют преданных разработчиков и немногих, кто заинтересован в документировании. Этому не помогает тот факт, что стойки ворот могут ежедневно меняться, что означает, что документация должна не только создаваться, но и поддерживаться.