как использовать свойство объекта 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]; }