如何使用 NSNotificationcenter 的对象属性

有人能告诉我如何在 NSNotifcationCenter 上使用对象属性吗。我希望能够使用它来传递一个整数值给我的选择器方法。

这就是我在 UI 视图中设置通知侦听器的方法。由于我希望传递一个整数值,所以我不确定用什么来替换 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#>
}
65442 次浏览

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

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