Как использовать свойство объекта NSNotificationcenter
Может кто-нибудь, пожалуйста, покажите мне, как использовать свойство объекта в NSNotifcationCenter. Я хочу иметь возможность использовать его для передачи целочисленного значения моему методу выбора.
Вот как я установил прослушиватель уведомлений в своем представлении пользовательского интерфейса. Видя, как мне нужно передать целочисленное значение, я не уверен, что заменить нуль.
[[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#>
}
Ответы
Ответ 1
Параметр 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];
Ответ 2
Свойство object
не подходит для этого. Вместо этого вы хотите использовать параметр userinfo
:
+ (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];
}