我正在玩Carbon的全球热键,我注册了一个热键。按下热键时,会调用此函数:
OSStatus myHotKeyHandler(EventHandlerCallRef nextHandler, EventRef anEvent, void *userData) {
...
}
此功能与我的app delegate定义位于同一文件中。我现在如何在该函数中调用我的委托上的ObjC方法?
[self aMethod];
我无法将一个void*
(作为我的类实例的指针)添加到C函数中,因为我不是那个调用它的人。
我尝试将方法转换为类方法,然后使用[AppDelegate aFunction]
调用它,这可以工作但我不能使用我的实例变量!
答案 0 :(得分:8)
你正在重新发明轮子。使用包装器:
http://github.com/davedelong/DDHotKey
也许不是 wheel ,因为热键不是“琐碎的”#34;概念。也许你正在重塑差异?或者其他的东西? ;)子>
答案 1 :(得分:5)
在注册事件处理程序时,将指向类实例的指针作为userData
的参数。然后,您将此指针作为userData
返回到处理程序内。
答案 2 :(得分:3)
示例代码
InstallApplicationEventHandler(&MyHotKeyHandler,1,&eventType,(void *)self,NULL);
...
OSStatus MyHotKeyHandler(EventHandlerCallRef nextHandler,EventRef theEvent,
void *userData)
{
[(yourAppDelegate *)userData dosomething];
}