Приложение NSApplicationDelegate активно из-за протокола URL

Привет! У меня настроено приложение Mac для запуска по протоколу myApp://, который вызывается в браузере, например Safari, но я не могу выполнить какое-либо действие, когда приложение вызывается по этому протоколу. Метод делегата должен быть примерно таким:

- (void)applicationDidBecomeActiveByURL:(NSURL *)protocol;

Я не знаю этого, потому что я новичок в разработке для Mac, но я несколько хорош в разработке для iPhone, поэтому я знаю способ разработки для iPhone, но не способ разработки для Mac

1 ответ

Решение

Вам нужно использовать NSAppleEventManager, Вы знаете, AppKit предшествует Internet, OS X по-прежнему работает в основном с файлами, не относящимися к схемам URL и т. Д. UIKit иногда лучше. Прочтите этот документ Apple.

На практике: сначала зарегистрируйте обработчик в applicationWillFinishLaunching:

-(void)applicationWillFinishLaunching:(NSNotification *)aNotification {
    NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager];
    [appleEventManager setEventHandler:self 
                           andSelector:@selector(handleGetURLEvent:withReplyEvent:)
                         forEventClass:kInternetEventClass andEventID:kAEGetURL];
}

а затем реализовать обработчик

- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent
{
    NSString *urlAsString = [[event paramDescriptorForKeyword:keyDirectObject] stringValue];
    ... do something ... 
}

Вам также необходимо зарегистрировать свою схему в Info.plist,

Другие вопросы по тегам