Это не так уж сложно. Вам просто нужно держаться за первое уведомление, пока не сработает таймер или не появится второе уведомление. Комментарии, которые я вставил в код, должны объяснить процедуру.
- (void)awakeFromNib {
// Register for the notification you're interested in
[[NSDistributedNotificationCenter defaultCenter] addObserver:self
selector:@selector(iTunesNoteCallback:)
name:NSTheiTunesNotificationImInterestedIn
object:nil]; // @"iTunes"?
}
- (void)iTunesNoteCallback:(NSNotification *)note {
// Check whether there's been a notification already
if( !gotFirstNote ){
// If so, hang on to it,
gotFirstNote = YES;
self.currNote = note; // With currNote declared as a retained property
// and start a timer.
noteTimer = [NSTimer scheduledTimerWithTimeInterval:2.0
target:self
selector:@selector(actOniTunesInfo:)
userInfo:nil repeats:NO];
}
else {
// However, if we got a notification already,
// hang on to the new one,
self.currNote = note;
// stop the timer,
[noteTimer invalidate];
// and call the same method the timer would have
[self actOniTunesInfo:nil];
}
}
- (void)actOniTunesInfo:(NSTimer *)timer {
// Reset the flag
gotFirstNote = NO;
// Use currNote; doesn't matter which one it is,
// it's the best info we've gotten
}
Если есть два типа уведомлений, это еще проще. Флаг вам больше не нужен, вы просто регистрируете два обратных вызова, и как только вызывается второй, вы можете сделать недействительным таймер, отменить первое уведомление и использовать только что полученную информацию.