Вопрос

Может кто-нибудь, пожалуйста, покажите мне, как использовать свойство объекта на NsnotifcationCenter. Я хочу использовать его для передачи целочисленного значения для моего метода селектора.

Вот как я настроил слушатель уведомления в моем виде UI. Увидев, как я хочу, чтобы целочисленное значение было передано, я не уверен, что заменить ноль.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveEvent:) name:@"myevent" object:nil];


- (void)receiveEvent:(NSNotification *)notification {
    // handle event
    NSLog(@"got event %@", notification);
}

Я отправляю уведомление из другого класса, подобного этому. Функция передается переменной с именем индекса. Именно это значение я хочу каким -то образом снять с уведомления.

-(void) disptachFunction:(int) index
{
    int pass= (int)index;

    [[NSNotificationCenter defaultCenter] postNotificationName:@"myevent" object:pass];
    //[[NSNotificationCenter defaultCenter] postNotificationName:<#(NSString *)aName#>   object:<#(id)anObject#>
}
Это было полезно?

Решение

То 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];

Другие советы

То 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];
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top