2008-12-03 53 views
1

我設置了一個簡單的事件處理程序,如here所述,但似乎沒有調用選擇器。我把代碼放在我的AppDelegate類中,並用IB連接了代理。試圖在選擇器中放入一些NSLog()和斷點,我希望被調用,但沒有一個命中。 URL方案的工作原理是它啓動我的應用程序,但在此之後它什麼都不做。任何人都可以建議如何解決這個問題?謝謝!如何解決我的自定義URL方案?

回答

2

嗯,我不禁注意到你是-init方法被錯誤宣佈。如果應該有返回類型id並在末尾有return self;

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     [[NSAppleEventManager sharedAppleEventManager] setEventHandler:self andSelector:@selector(getUrl:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL]; 
    } 
    return self; 
} 

有了這些修訂,我能夠把這些兩個例程粘貼到測試的AppController類,並把它打印出來,我輸入到Safari瀏覽器的網址(定製方案)。我會在該-init方法上放置一個斷點並逐步完成,以確保-setEventHandler:方法正在被調用。

+0

CRAP!我知道這將是一個新手的錯誤。謝謝... – jxpx777 2008-12-04 15:01:09

0

最大的問題是:你在哪裏調用NSAppleEventManager的-setEventHandler:...?如果你想捕捉一個啓動你的應用的URL,你需要在你的應用完成啓動之前調用它。如果您的應用程序委託在您的MainMenu.nib中創建,那麼它的-init或-awakeFromNib方法都可以工作,但是,例如,-applicationDidFinishLaunching:不會。

此外,請確保您提供給-setEventHandler:的選擇器與您的方法名稱完全相同,特別注意大寫和冒號的正確數目。

很明顯,如果你發佈了你的應用代理的相關代碼,這將是非常有幫助的。

0

感謝您的建議。我仔細檢查了這些東西。我相信這是一個新手的錯誤,但我會很感激任何人在看代碼。 (這些URL位存儲在info.plist中。)現在,我只是試圖確認在我嘗試對URL執行任何操作之前它正在工作。

- (void)init{ 
    self = [super init]; 
    if(self){ 
     [[NSAppleEventManager sharedAppleEventManager] setEventHandler:self andSelector:@selector(getUrl:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL]; 
    } 
} 

- (void)getUrl:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent 
{  
    NSString *url = [[event paramDescriptorForKeyword:keyDirectObject] stringValue]; 
    NSLog(url); 
    // now you can create an NSURL and grab the necessary parts 
} 
+0

我應該補充一點,我嘗試將方法調用移動到-awakeFromNib但沒有喜悅。 – jxpx777 2008-12-04 02:07:18

0

新手錯誤#2:沒有在IB中設置我的應用程序委託的類。修復這個和上面的init方法讓我走了。 Grrr ...

相關問題