Можно ли добавить Центр уведомлений в класс cpp в target-c ++ - PullRequest
1 голос
/ 17 декабря 2009

Я бы хотел добавить центр уведомлений из класса cpp, возможно ли ????

Если так, как мне это сделать?

Manager.h

class Manager
{

  Manager();

};

Файл Manger.mm

Manager:Manager()
{
[[NSNotificationCenter dafaultCenter] addObserver:self selector:@selector(workermethod) name:@" Name" object:(id)nil];
}

Мой компилятор выдает ошибку, говоря, что self не объявлено ....... да, я знаю, что это очевидная ошибка.

Так как я не наследую от NSObject .... Пожалуйста, дайте мне знать, если возможно добавить центр уведомлений в класс cpp в Какао ??

Ответы [ 2 ]

6 голосов
/ 17 декабря 2009

Нет, вы не можете этого сделать.

Иерархии классов Objective-C и C ++ разделены. В контексте C ++ self не определено, но определено this. В контексте Objective C this не определено, а self равно.

Кроме того, addObserver принимает параметр id. Экземпляры объектов C ++ не рассматриваются как типы id, поэтому даже если вы измените свой код на this вместо self, он не скомпилируется.

См. Ограничения C ++ в руководстве по языку программирования Objective-C.

В качестве обходного пути, создайте класс Objectve-C, который имеет экземпляр объекта C ++, к которому вы хотите, чтобы уведомление направлялось, и просто вызовите метод C ++, когда объект Objective-C получит уведомление.

0 голосов
/ 17 декабря 2009

Как отметил Бен С., вы не можете использовать объект C ++, где ожидается объект Objective-C. Они просто не одно и то же. Если вы нацелены на 10.6, одной из альтернатив создания оболочки Objective-C является использование NSNotificationCenter's addObserverForName:object:queue:usingBlock:. Просто дайте ему блок, который вызывает функцию вашего объекта, и вы получите тот же эффект, что и добавление этого объекта в качестве наблюдателя.

Просто чтобы подчеркнуть, что это возможно только на 10.6.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...