我想从cpp类中添加通知中心,是否可能????
如果是这样,我该怎么做?
Manager.h
class Manager
{
Manager();
};
Manger.mm文件
Manager:Manager()
{
[[NSNotificationCenter dafaultCenter] addObserver:self selector:@selector(workermethod) name:@" Name" object:(id)nil];
}
我的编译器发出一个错误,说自己没有声明.......是的,我知道这是一个明显的错误。
因为我不是从NSObject派生出来的.... 如果可以在Cocoa中添加通知中心到cpp ??
,请告诉我答案 0 :(得分:6)
不,你做不到。
Objective-C和C ++类层次结构是分开的。在C ++上下文中,未定义self
,但定义了this
。在Objective-C环境中,this
未定义且self
为。
此外,addObserver
采用id
参数。 C ++对象实例不被视为id
类型,因此即使您将代码更改为传递this
而不是self
,也无法编译。
请参阅Objective-C编程语言手册中的C++ Limitations。
作为一种解决方法,创建一个Objectve-C类,它具有您希望通知发送到的C ++对象的实例,并在Objective-C对象获取通知时简单地在其上调用C ++方法。
答案 1 :(得分:0)
正如Ben S所指出的,你不能使用期望Objective-C对象的C ++对象。他们只是不一样的东西。如果您的目标是10.6,那么制作Objective-C包装器的另一种方法是使用NSNotificationCenter的addObserverForName:object:queue:usingBlock:
。只需给它一个块来调用对象上的函数,你就可以获得与将该对象添加为观察者相同的效果。
只是要强调,这只能在10.6上实现。