是否可以在Objective-c ++中将Notification Center添加到cpp类

时间:2009-12-17 19:03:50

标签: objective-c

我想从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 ??

,请告诉我

2 个答案:

答案 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上实现。