web-dev-qa-db-fra.com

comment utiliser la propriété d'objet de NSNotificationcenter

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

C'est ainsi que j'ai configuré l'écouteur de notification dans ma vue d'interface utilisateur. Étant donné que je veux transmettre une valeur entière, je ne sais pas 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);
}

J'envoie la notification d'une autre classe comme celle-ci. La fonction reçoit une variable nommée index. C'est cette valeur que je veux en quelque sorte tirer 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#>
}
72
dubbeat

Le paramètre object représente l'expéditeur de la notification, qui est généralement self.

Si vous souhaitez transmettre des informations supplémentaires, vous devez utiliser la méthode NSNotificationCenterpostNotificationName:object:userInfo:, qui prend un dictionnaire arbitraire de valeurs (que vous êtes libre de définir). Le contenu doit être des instances NSObject réelles, pas un type intégral tel qu'un entier, vous devez donc encapsuler les valeurs entières avec des objets NSNumber.

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

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

La propriété object n'est pas appropriée pour cela. Au lieu de cela, vous souhaitez utiliser le paramètre userinfo:

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

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

Votre méthode dispatchFunction serait plutôt la suivante:

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

Votre méthode receiveEvent ressemblerait à ceci:

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