如何使用NSNotificationcenter的对象属性

有人可以告诉我如何使用NSNotifcationCenter上的对象属性。 我想能够使用它来传递一个整数值给我的select器方法。

这是我如何在我的UI视图中设置通知侦听器。 看到我想要一个整数值被传递我不知道什么要取代零。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveEvent:) name:@"myevent" object:nil]; - (void)receiveEvent:(NSNotification *)notification { // handle event NSLog(@"got event %@", notification); } 

我从这样的另一个类发送通知。 该函数传递一个名为index的variables。 这是我想以某种方式发出通知的价值。

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