2 votes

Échec de la communication Cocoa NSNotificationCenter entre les applications

J'ai besoin de communiquer entre deux applications de console différentes, Observer et Client.

Dans l'application Observer, j'ai ajouté ce code :

[[NSNotificationCenter defaultCenter] postNotificationName:@"MyNotification" object:self];

Dans l'application Client, j'ai ajouté ce code :

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

-(void)trackNotification:(NSNotification*)notif
{
    NSLog(@"trackNotification: %@", notif);
    NSLog(@"trackNotification name: %@", [notif name]);
    NSLog(@"trackNotification object: %@", [notif object]);
    NSLog(@"trackNotification userInfo: %@", [notif userInfo]);
}

mais rien ne se passe. J'ai lu toute la documentation, mais je suis tout nouveau dans Mac OS X. Avez-vous des idées ?


Je me suis renseigné sur les notifications distribuées, j'ai modifié mon code et il ressemble maintenant à ceci : Du côté du serveur :

[[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(trackNotification:) name:@"MyNotification" object:nil];

-(void)trackNotification:(NSNotification*)notif
{
    NSLog(@"trackNotification: %@", notif);
    NSLog(@"trackNotification name: %@", [notif name]);
    NSLog(@"trackNotification object: %@", [notif object]);
    NSLog(@"trackNotification userInfo: %@", [notif userInfo]);
}

Du côté client :

NSMutableDictionary *info;
info = [NSMutableDictionary dictionary];
[info setObject:@"foo" forKey:@"bar"];

[[NSDistributedNotificationCenter defaultCenter] postNotificationName:@"MyNotification"
                                   object:nil
                                 userInfo:info 
                       deliverImmediately:YES];

Je lance les deux applications, mais rien ne se passe. Qu'est-ce que je fais de mal ?

6voto

Rob Napier Points 92148

NSNotificationCenter ne concerne que les notifications dans une seule application. Vous voulez NSDistributedNotificationCenter . Vous pouvez trouver plus de détails dans le Sujets relatifs à la programmation des notifications .

0voto

Ana Points 375

J'ai résolu mon problème. Voici le code source : Du côté du client :

NSDictionary *user = [NSDictionary dictionaryWithObjectsAndKeys: @"John Doe", @"name", @"22222222222", @"phone", @"Dummy address", @"address", nil];

//Post the notification
NSString *observedObject = @"com.test.net";
NSDistributedNotificationCenter *center = [NSDistributedNotificationCenter defaultCenter];
[center postNotificationName: @"Plugin Notification" object: observedObject userInfo: user deliverImmediately: YES];

Du côté du serveur

NSString *observedObject = @"com.test.net";
NSDistributedNotificationCenter *center = [NSDistributedNotificationCenter defaultCenter];
[center addObserver: self selector: @selector(receiveNotification:) name: @"Plugin Notification" object: observedObject];

définition de receiveNotification

-(void)receiveNotification:(NSNotification*)notif
{
    NSlog(@"Hello");
}

Dans la méthode dealloc

[[NSDistributedNotificationCenter defaultCenter] removeObserver:self name: @"Plugin Notification" object: nil];

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