2013-03-31 3 views
1

Здравствуйте. Я пытаюсь контролировать ключи, которые пользователь нажимает в приложении cacao.Невозможно инициализировать параметр типа NSEvent * с rvalue типа void

Я использовал этот код:

// this code works! 
CGEventMask keyboardMaskKeyDown = CGEventMaskBit(kCGEventKeyDown); 

keyboardEventresult = [NSEvent addGlobalMonitorForEventsMatchingMask:keyboardMaskKeyDown handler:^(NSEvent *keyboardEvent) 
{ 
     keyboardEventresult = keyboardEvent; 
     _currentKeystr = [NSString stringWithFormat:@"%c",[[keyboardEvent characters]characterAtIndex:0]]; 
     NSLog(@"Pressed key: %@",_currentKeystr); 
     [hiddentextfield setStringValue:[NSString stringWithFormat:@"%@",_currentKeystr]]; 
    }]; 

Но проблема в том, что когда я изменяю:

addGlobalMonitorForEventsMatchingMask 

в

addLocalMonitorForEventsMatchingMask 

Я получаю сообщение об ошибке говорящее Cannot initialize a parameter of type NSEvent *(^)(NSEvent *_strong) with an rvalue of type void(^)(NSEvent *_strong)

Here вы можете увидеть, что яблоко делает что-то подобное

  _eventMonitor = [NSEvent addLocalMonitorForEventsMatchingMask: 

     (NSLeftMouseDownMask | NSRightMouseDownMask | NSOtherMouseDownMask | NSKeyDownMask) 

     handler:^(NSEvent *incomingEvent) 

Любые идеи о том, как это исправить?

ответ

2

В сообщении об ошибке сообщается, что вы передаете неправильный тип параметра. Ожидается, что NSEvent *(^)(NSEvent *_strong) (блок принимает один аргумент типа NSEvent* и возвращает NSEvent*), но вы передаете void(^)(NSEvent *_strong) (блок принимает один аргумент типа NSEvent* и возвращает void. Обратите внимание на разницу в типах возвращаемых блоков - они должно точно совпадать.

чтобы это исправить, чтобы ваш блок возвращает NSEvent*. Согласно documentation, вам нужно «вернуть событие неизмененным, создать и вернуть новый объект NSEvent, или возвращают ноль, чтобы остановить диспетчеризацию событие ». Итак, добавьте оператор return <something>; в конец вашего блока, где <something> - это одно и то же событие, или новое событие, или nil.

+0

Спасибо, не заметил этого :) – Jona

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