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

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];
}