как использовать свойство объекта NSNotificationcenter
может кто-нибудь, пожалуйста, покажите мне, как использовать свойство объекта на NSNotifcationCenter. Я хочу иметь возможность использовать его для передачи целочисленного значения в мой метод селектора.
вот как я настроил прослушиватель уведомлений в моем представлении пользовательского интерфейса. Видя, что я хочу передать целочисленное значение, я не уверен, чем заменить nil.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveEvent:) name:@"myevent" object:nil];
- (void)receiveEvent:(NSNotification *)notification {
// handle event
NSLog(@"got event %@", notification);
}
отправить уведомление из другого класса, как это. Функция передается переменной с именем index. Именно это значение, что я хочется как-то отстреливаться с уведомлением.
-(void) disptachFunction:(int) index
{
int pass= (int)index;
[[NSNotificationCenter defaultCenter] postNotificationName:@"myevent" object:pass];
//[[NSNotificationCenter defaultCenter] postNotificationName:<#(NSString *)aName#> object:<#(id)anObject#>
}
2 ответа:
The
objectпараметр представляет отправителя уведомления, который обычноself.если вы хотите передать дополнительную информацию, вам нужно использовать
NSNotificationCenterметодpostNotificationName:object:userInfo:, который принимает произвольный словарь значений (которые вы можете определить). Содержание должно быть актуальнымNSObjectэкземпляры, а не целочисленный тип, такой как целое число, поэтому вам нужно обернуть целочисленные значения с помощьюNSNumberобъекты.NSDictionary* dict = [NSDictionary dictionaryWithObject: [NSNumber numberWithInt:index] forKey:@"index"]; [[NSNotificationCenter defaultCenter] postNotificationName:@"myevent" object:self userInfo:dict];
The
objectсобственность не подходит для этого. Вместо этого вы хотите использовать :+ (id)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)userInfo
userInfoэто, как вы можете видеть, NSDictionary специально для отправки информации вместе с уведомлением.код
dispatchFunctionметод вместо этого будет что-то вроде этого:- (void) disptachFunction:(int) index { NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:index] forKey:@"pass"]; [[NSNotificationCenter defaultCenter] postNotificationName:@"myevent" object:nil userInfo:userInfo]; }код
receiveEventметод будет что-то вроде этого:- (void)receiveEvent:(NSNotification *)notification { int pass = [[[notification userInfo] valueForKey:@"pass"] intValue]; }