Tôi đang cố gắng triển khai lược đồ URL tùy chỉnh cho ứng dụng của mình. Tôi đã thêm các dòng cần thiết cho Info.plist của mình. Sau khi gọi url được chỉ định (ví dụ: myapp: //) ứng dụng sẽ khởi chạy.Lược đồ URL - Qt và mac
Nếu tôi muốn xử lý URL, tôi đã tìm thấy các bước sau:
@interface EventHandler : NSObject {
}
@end
@implementation EventHandler
- (id)init {
self = [super init];
if (self) {
NSLog(@"eventHandler::init");
NSNotificationCenter* defaultCenter = [NSNotificationCenter defaultCenter];
[defaultCenter addObserver:self
selector:@selector(applicationDidFinishLaunching:)
// name:NSApplicationWillFinishLaunchingNotification
name:NSApplicationDidFinishLaunchingNotification
object:nil];
}
return self;
}
- (void)applicationDidFinishLaunching:(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* url = [[event paramDescriptorForKeyword:keyDirectObject] stringValue];
NSLog(@"%@", url);
}
@end
Đoạn mã trên đang làm việc nếu ứng dụng đang chạy, nhưng nếu các URL được gọi và ứng dụng đã được chấm dứt, sự kiện không bị bắt. Tôi nghĩ rằng điều này là bởi vì điều này: NSApplicationDidFinishLaunchingNotification. Thay đổi thành NSApplicationWillFinishLaunchingNotification khiến cho các sự kiện không bị bắt. Có lẽ Qt xử lý nó trước tôi, nhưng tôi không thể tìm được cách giải quyết vấn đề.
Dường như nghe thông báo NSApplicationDidBecomeActiveNotification giải quyết vấn đề. Tôi không nghĩ rằng đó là cách tốt nhất để đi, vì vậy tôi để lại câu hỏi mở cho một số ý tưởng tốt hơn :) – birmacher