Так что я новичок в NSNotifications, мне интересно, какова область применения. То есть Если у меня есть класс делегата приложения, и он является получателем уведомления:
-(id)init
{
[ super init];
if (!self) return nil;
// Add to our notification
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(receiveUpdateRequest:)
name:@"RequestStatusUpdate"
object:nil];
return self;
}
И этот метод запускается при получении:
- (void) receiveUpdateRequest:(NSNotification *) notification
{
// Check the Notification Name
if ([[notification name] isEqualToString:@"RequestStatusUpdate"]){
NSLog (@"Recieved Update Status!");
}
else {
NSLog(@"Recieved Notification: %@",[notification name]);
}
}
Могу ли я опубликовать уведомление так:
[[NSNotificationCenter defaultCenter] postNotificationName:@"RequestStatusUpdate" object:self];
Из другого экземпляра объекта где-нибудь в моем приложении?
Даже, например, объект, который создается в результате загрузки NIB:
summaryWindow = [[SummaryWindowController alloc] initWithWindowNibName:@"SummaryWindow" owner:globalStatusController];
Нужно ли что-либо еще настраивать в моем классе summaryWindow, чтобы можно было вызывать метод postNotificationName.
Или, другими словами, глобальный [NSNotificationCenter defaultCenter] для всех экземпляров всех объектов в моем Приложении, я бы предположил, что это будет работать, но в настоящее время, когда я вызываю этот метод через IBAction в моем SummaryWindow, уведомление не кажется полученным.
Я протестировал [NSThread currentThread] и центр уведомлений по умолчанию, и похоже, что я нахожусь в потоке и в одном и том же центре уведомлений (который я считаю всегда глобальным). Я смотрю только на нить, так как она появляется в нескольких других темах.
2011-08-22 20:57:11.452 AppName[23102:1307] Using Default Notification Center: <CFNotificationCenter 0x10012c900 [0x7fff7d302ea0]>
2011-08-22 20:57:20.366 AppName[23102:1307] Using Default Notification Center: <CFNotificationCenter 0x10012c900 [0x7fff7d302ea0]>