2010-02-18 2 views
5

나는 두 개의 클래스를 만들 필요가 둘 다 모두가 sendEvent 및 receiveEvent 방법을 가지고 있어야 NSNotificationCenter의 methods.ie를 통해 이벤트를주고받을 수 있습니다 : ClassB가도해야 돼 같은 다른 클래스로Objective-C의 NSNotificationCenter를 통해 이벤트를 보내고받는 클래스를 만드는 방법은 무엇입니까?

 @implementation Class A 
-(void)sendEvent 
{ 
    addObserver:--- name:---- object:--- 
} 

-(void)ReceiveEvent 
{ 
postNotificationName: --- object:--- 
} 
@end 

같은 이벤트를 보내고받을 수 있어야합니다. 어떻게 할 수 있습니까?

답변

10

이상적으로 객체는 초기화되는 즉시 재미있는 이벤트를 관찰하기 시작할 것입니다. 따라서 모든 흥미로운 이벤트를 초기화 코드의 NotificationCenter에 등록합니다. sendEvent:은 기본적으로 postNotification: 메소드의 래퍼입니다. 클래스 B의 동일

@implementation A 

- (id)init { 
    if(self = [super init]) { 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveEvent:) name:@"SomeEvent" object:nil]; 
    } 
    return self; 
} 

- (void)sendEvent { 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"SomeOtherEvent" object:nil]; 
} 

// Called whenever an event named "SomeEvent" is fired, from any object. 
- (void)receiveEvent:(NSNotification *)notification { 
    // handle event 
} 

@end 

편집 1 :

당신은 지나치게 복잡한 문제가 될 수 있습니다. NSNotificationCenter는 모든 이벤트가 전송되는 브로커 역할을하며 누가 전달할지 결정합니다. Observer pattern과 비슷하지만 객체가 서로를 직접 관찰하거나 통보하지는 않지만 중앙 브로커 (이 경우 NSNotificationCenter)를 통해 알 수 있습니다. 이를 통해 #include을 사용하여 서로 상호 작용할 수있는 두 클래스를 직접 연결할 필요가 없습니다.

클래스를 디자인 할 때 개체가 알림을받는 방식 또는 다른 관심있는 개체에 알림을 보내는 방식에 대해 걱정할 필요가 없습니다. 개체가 발생할 때 일부 이벤트에 대해 알림을 받아야하거나 NSNotficationCenter에 알릴 필요가 있습니다. 이벤트가 발생할 때

간단히 말해이 객체는이 init() 메서드에서 알아야 할 모든 이벤트를 찾아서 dealloc() 메서드에서 등록을 취소합니다.

basic tutorial이 도움이 될 수 있습니다.

+0

또한 classA.h에 @classB를 지정 했으므로 이제 classB.h의 @classA와 같이 두 클래스에서 모두 할 수 있습니다. – Cathy

+0

클래스 A와 클래스 B 사이에서 메시지를 전달하려고합니까? – Anurag

+0

사실 내 요청은 한 NSNotificationCenter 하나의 클래스를 만드는 것입니다 그리고 그것의 개체를 사용하여 sendEvent() 메서드 및 SubscribeEvent() 메서드를 만들 수 있어야합니다. 이제 ClassA는 다른 클래스에 이벤트 및 sendEvents를 수신 할 수 있어야합니다. 어떻게해야합니까 ?? – Cathy