iOS / Objective-C: NSNotification
У меня есть вопрос, основанный на NSNotification в Objective-C:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(method:)
name:@"SOME_STRING"
object:nil];
Я действительно не знаю, как установить атрибут объекта...
Итак, если я хочу получать уведомления только от класса a, как я могу установить для него класс a?
[A class]
а также
[A alloc]
не работает.
Я очень озадачен параметром объекта.
3 ответа
Если nil
тогда вы получите все @"SOME_STRING"
уведомления отправлены.
если не nil
вы получаете только те, которые относятся к экземпляру, переданному object
,
так что... на самом деле это не ассоциация "из класса А", это ассоциация с конкретным экземпляром. когда экземпляры совпадают (наблюдение и публикация), вы получаете уведомление.
С этой информацией вы можете использовать экземпляр objc, возвращенный [A class]
как object
Параметр для получения интересующих вас уведомлений - выглядит так:
Заметим:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(method:)
name:@"SOME_STRING"
object:[A class]];
^^^^^^^
Сообщение:
[[NSNotificationCenter defaultCenter]
postNotificationName:@"SOME_STRING" object:[A class]];
^^^^^^^
Параметр объекта - это объект, который вы хотите наблюдать, вы не можете наблюдать за классом.
Но в вашем методе вы можете проверить класс объекта:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(method:)
name:@"SOME_STRING"
object:nil];
- (void)method:(NSNotification*)notif
{
if ([[notif object] isKindOfClass:[A class]]) {
//...
}
}
Для публикации уведомления вы можете использовать метод ниже:-
[[NSNotificationCenter defaultCenter] postNotificationName:@"testNotification" object:[A class]];
Чтобы получить уведомление, сначала добавьте следующий метод в ваш метод viewDidLoad:-
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notifyWhenCalled:) name:@"testNotification" object:[A class]];
Объявите ниже селектор. Это будет вызвано, когда ваше уведомление сработало:-
- (void) notifyWhenCalled:(NSNotification *)notification
{
if ([[notification object] isKindOfClass:[A class]])
{
//..... Write your code to do anything.
}
}