web-dev-qa-db-ja.com

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#>
}
72
dubbeat

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

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