2008-12-03 2 views
1

Я установил простой обработчик событий, как упомянуто here, но, похоже, селектор не вызывается. Я поместил код в свой класс AppDelegate и подключил делегат в IB. Попробовал поместить некоторые NSLog() s и точки останова в селекторе, который я ожидаю назвать, но ни один из них не попал. Схема 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 и он распечатать URL (с пользовательской схемы), которые я напечатал в 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 ...

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