2010-11-30 2 views
69

누군가 NSNotifcationCenter에서 개체 속성을 사용하는 방법을 보여 주실 수 있습니까? 내 선택기 메서드에 정수 값을 전달하는 데 사용할 수 있어야합니다.NSNotificationcenter의 개체 속성을 사용하는 방법

내 UI보기에서 알림 수신기를 설정 한 방법입니다. 정수 값을 전달하려면 nil을 대체 할 대상을 모르겠습니다.

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


- (void)receiveEvent:(NSNotification *)notification { 
    // handle event 
    NSLog(@"got event %@", notification); 
} 

이렇게 다른 클래스에서 알림을 발송합니다. 이 함수에는 index라는 변수가 전달됩니다. 어떻게 든 알림으로 시작하고 싶은이 가치입니다.

-(void) disptachFunction:(int) index 
{ 
    int pass= (int)index; 

    [[NSNotificationCenter defaultCenter] postNotificationName:@"myevent" object:pass]; 
    //[[NSNotificationCenter defaultCenter] postNotificationName:<#(NSString *)aName#> object:<#(id)anObject#> 
} 

답변

102

object 매개 변수는 통지를 보낸 사람을 나타내는, 보통 :

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

귀하의 receiveEvent 방법은 아래와 같습니다

귀하의 dispatchFunction 방법 대신이 같은 것 self.

추가 정보를 전달하려면 NSNotificationCenter 메서드 postNotificationName:object:userInfo:을 사용해야합니다. 임의의 값 사전 (정의 할 수 있음)을 사용합니다. 내용은 정수와 같은 정수 유형이 아닌 실제 NSObject 인스턴스 여야하므로 NSNumber 개체로 정수 값을 래핑해야합니다.

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

[[NSNotificationCenter defaultCenter] postNotificationName:@"myevent" 
             object:self 
             userInfo:dict]; 
+2

위대한 마음은 동시에 작동합니다. :) –

+0

나는 당신의 선택에 갔다. 내가해야만하는 유일한 일은 사전 주위에 자동 풀 풀을 감싸는 것 뿐이었다. – dubbeat

+3

(아, 내 해결책은 Matthew와 같습니다. 조금만 복종하면됩니다.) – gavinb

81

object 속성이 적합하지 않습니다. 대신 당신은 userinfo 매개 변수를 사용하려면 : 당신은 통지와 함께 정보를 전송하기 위해 구체적으로는있는 NSDictionary를 볼 수

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

userInfo이다.

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

"개체 속성이 적합하지 않습니다." 왜 그게 적절하지 않습니까? 어쨌든 객체 속성을 사용하여 (예를 들어) NSString *을 전달하려고하면. 무슨 일이 일어날 것? – Selvin

+1

@Selvin 알림을 게시하는 개체를 보내는 데 사용합니다 (사용하려면 'self'로 설정합니다). 다른 것을 거기에 넣으면 어떻게 될까요? 나는 잘 모르지만 추측해야만한다면, 알림 센터에서 무엇을 공개해야하는지 추적하는 등 표지 아래에있는 일들이 엉망이 될 수 있습니다. 물체를 통과시키는 실제 시스템이있을 때 왜 위험합니까? –

+3

"NSNotification 객체 (알림이라고 함)는 이름, 객체 및 선택적 사전을 포함하며, 이름은 알림을 식별하는 태그입니다. 객체는 알림의 포스터가 옵저버에게 보내는 모든 객체입니다. 해당 알림 - 일반적으로 알림을 게시 한 개체이며 사전에는 이벤트에 대한 추가 정보가 포함될 수 있습니다. " 내게 들리는 것은'self '와'nil' 이외의 것을'object :'에 넣는 것이 완벽 할 것 같은 것입니다. – max

관련 문제