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