2012-01-27 2 views
1

В настоящее время я пишу приложение для использования системных служб для импорта изображения.Услуги Mac не работают

Я все шаги из документа Apple, о использованием услуг,

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/SysServices/Articles/using.html#//apple_ref/doc/uid/20000854-CEGDDHJJ

, но это не сработало.

У меня есть NSViewController и поставить

"[NSApp registerServicesMenuSendTypes:returnTypes:...]"

в функции "инициализации", и перезаписать эти функции: 'validRequestorForSendType', 'readSelectionFromPasteboard', 'writeSelectionToPasteboard'.

"registerServicesMenuSendTypes:returnTypes" был вызван после того, как я запустил приложение, но никто из других не вызывается, ни меню сервиса не изменяется.

Может ли кто-нибудь помочь мне с этим или дать мне хороший пример?

Большое спасибо.

ответ

1

Получил ответ от яблока: (basicaly это будет сложнее сделать это в NSViewController, так что я просто реализовать в NSWindowController)

============= ================================================== ===============

Разработал ли ваш пользовательский класс - [NSApplication registerServicesMenuSendTypes: returnTypes:] на ранней стадии в приложении, например, в методе + initialize?

Вы говорите, что ожидаете -validRequestorForSendType: returnType: для вызова в вашем окне и просмотра контроллеров (а не самих окон или представлений). Однако это необязательно. Согласно документации, это сообщение отправляется объектам в цепочке ответчиков, а NSApplication документируется как отправка его его делегату, а NSWindow отправляет его своему делегату. Важно отметить, что оконный контроллер не обязательно является делегатом окна, которое он контролирует. Может быть. Это может быть общим, чтобы настроить его таким образом. Но это не делается автоматически каркасом. Итак, если вы хотите, чтобы оконный контроллер получал -validRequestorForSendType: returnType :, вам нужно убедиться, что он является делегатом окна.

Я не вижу ничего, что предполагает, что NSView пересылает это сообщение своему контроллеру. Разумеется, общий вид не имеет делегата. Даже для тех типов типов, которые имеют делегаты (например, NSTabView), нет документации, которая передает send -validRequestorForSendType: returnType: своим делегатам. Итак, если вы хотите, чтобы контроллер просмотра получал -validRequestorForSendType: returnType :, вам нужно будет убедиться, что он находится в цепочке ответчиков (или написать собственный подкласс вида, который специально передает это сообщение его контроллеру).

Смежные вопросы