72 votes

comment utiliser la propriété objet de NSNotificationcenter

Quelqu'un pourrait-il me montrer comment utiliser la propriété objet de NSNotifcationCenter ? Je veux pouvoir l'utiliser pour passer une valeur entière à ma méthode de sélection.

Voici comment j'ai configuré le récepteur de notification dans ma vue d'interface utilisateur. Comme je veux qu'une valeur entière soit transmise, je ne suis pas sûr de savoir par quoi remplacer nil.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveEvent:) name:@"myevent" object:nil];

- (void)receiveEvent:(NSNotification *)notification {
    // handle event
    NSLog(@"got event %@", notification);
}

Je dispatche la notification depuis une autre classe comme ceci. La fonction reçoit une variable nommée index. C'est cette valeur que je veux déclencher d'une manière ou d'une autre avec la notification.

-(void) disptachFunction:(int) index
{
    int pass= (int)index;

    [[NSNotificationCenter defaultCenter] postNotificationName:@"myevent" object:pass];
    //[[NSNotificationCenter defaultCenter] postNotificationName:<#(NSString *)aName#>   object:<#(id)anObject#>
}

105voto

gavinb Points 9237

Le site object représente l'expéditeur de la notification, qui est en général self .

Si vous souhaitez transmettre des informations supplémentaires, vous devez utiliser la fonction NSNotificationCenter méthode postNotificationName:object:userInfo: qui prend un dictionnaire arbitraire de valeurs (que vous êtes libre de définir). Le contenu doit être réel NSObject et non un type intégral tel qu'un entier. Vous devez donc entourer les valeurs entières d'une étiquette NSNumber objets.

NSDictionary* dict = [NSDictionary dictionaryWithObject:
                         [NSNumber numberWithInt:index]
                      forKey:@"index"];

[[NSNotificationCenter defaultCenter] postNotificationName:@"myevent"
                                      object:self
                                      userInfo:dict];

82voto

Matthew Frederick Points 14932

Le site object La propriété n'est pas appropriée pour cela. Vous devez plutôt utiliser la propriété userinfo paramètre :

+ (id)notificationWithName:(NSString *)aName 
                    object:(id)anObject 
                  userInfo:(NSDictionary *)userInfo

userInfo est, comme vous pouvez le voir, un NSDictionary spécifiquement destiné à envoyer des informations avec la notification.

Votre dispatchFunction serait plutôt quelque chose comme ceci :

- (void) disptachFunction:(int) index {
    NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:index] forKey:@"pass"];
   [[NSNotificationCenter defaultCenter] postNotificationName:@"myevent" object:nil userInfo:userInfo];
}

Votre receiveEvent serait quelque chose comme ceci :

- (void)receiveEvent:(NSNotification *)notification {
    int pass = [[[notification userInfo] valueForKey:@"pass"] intValue];
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X