由于URL协议,NSApplicationDelegate应用程序处于活动状态

时间:2010-06-25 04:54:58

标签: objective-c cocoa macos

喂!我将我的Mac应用程序设置为在myApp上启动://协议在浏览器中调用,如Safari,但是当该协议调用该应用程序时,我似乎无法执行操作。委托方法必须类似于:

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

我不知道这是因为我是Mac新手,但我对iPhone开发有点擅长,所以我知道iPhone开发方式,但不是Mac开发方式

1 个答案:

答案 0 :(得分:8)

您需要使用NSAppleEventManager。你知道,AppKit早于互联网,OS ​​X仍然主要用于不在URL方案上的文件等.UIKit有时更好。阅读此Apple doc

实践中:首先,在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注册您的方案。