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