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