Как использовать свойство объекта NsnotificationCenter
-
29-09-2019 - |
Вопрос
Может кто-нибудь, пожалуйста, покажите мне, как использовать свойство объекта на 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];
}