2011-09-30 2 views
2

Observer와 Client라는 두 가지 다른 콘솔 앱간에 통신해야합니다.애플 리케이션 간의 Cocoa NSNotificationCenter 통신에 실패했습니다.

[[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]); 
} 

하지만 아무 일도 일어나지 않는다 :이 코드를 추가 클라이언트 응용 프로그램에서

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

: 옵저버 응용 프로그램에서

는이 코드를 추가했습니다. 모든 설명서를 읽었지만 Mac OS X의 새로운 기능입니다. 아이디어가 있습니까?


나는, 분산 알림에 대해 읽어 내 코드를 변경하고 지금은 다음과 같습니다 : 클라이언트 측에서

[[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]); 
} 

:

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

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

I 서버 측에서 두 응용 프로그램을 모두 실행하지만 아무 일도 일어나지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

0

내 문제가 해결되었습니다. 클라이언트 측에서 : 서버 측에서

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

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

receiveNotification 정의의 dealloc 방법에

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

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