2010-04-26 2 views
1

누군가 내 알림 문제를 도울 수 있기를 바랍니다. 올바르게 설정 한 것처럼 보이지만 예상대로 전달되지 않은 알림이 있습니다. 문서 기반 앱을 개발 중입니다. 대리인/문서 클래스의 게시물이 저장된 파일에서 읽어 알림 :코코아 문서 기반 앱 : 관찰자가 항상 알림을받지 못함

[[NSNotificationCenter defaultCenter] postNotificationName:notifyBsplinePolyOpened object:self]; 

로깅 내가 저장 한 문서를 열 때마다이 선에 도달 하더군요. DrawView 클래스에서

, 나는 windowOpen 통지를 관찰자가 있고 bsplinePoly 오픈 알림을 파일 :

[[NSNotificationCenter defaultCenter] addObserver:self 
                  selector:@selector(mainWindowOpen:) 
                  name:NSWindowDidBecomeMainNotification 
                  object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
                  selector:@selector(savedBspline:) 
                  name:notifyBsplinePolyOpened 
                  object:nil]; 

- (void)  mainWindowOpen:(NSNotification*) note 
{ 
     NSLog(@"Window opened"); 
     _mainWindow = [note object]; 
} 

- (void) savedBspline:(NSNotification*) note 
{ 
     NSLog(@"savedBspline called"); 
     NSLog(@"note is %@", [note name]); 
} 

행동이 이상하다. 주 창을 저장하고 닫은 후 다시 열면 "창 열림"메시지가 표시되지만 "저장된 B 스플라인 호출 됨"메시지는 표시되지 않습니다. 메인 윈도우를 열어두고 이전에 저장 한 세션을 열면 "윈도우가 열렸습니다"라는 메시지와 "savedBspline called"메시지가 나타납니다.

온라인 토론과 Apple DevCenter 설명서를 검색했지만이 문제를 보지 못했습니다.

답변

1

NSNotification 예상대로 작동합니다 (at least when no NSNotificationQueue's are involved). 그것들은 즉시 전달되고 다른 스레드가 아닌 지연없이 필터링되고 필터링되지 않습니다.

내가 말하고 싶은데, 일부 개체는 알림이 시작될 때 인스턴스화되지 않았거나 다른 방법으로 실행 순서가 뒤섞였습니다. 저장된 파일에서 읽을 때 알림을 게시한다고하지만 창을 저장하고 닫는 동안 알림이 누락되었습니다.

디버깅을 돕기 위해 모든 알림을 기록하는 앱 위임자를 알림 관찰자로 설정하는 것이 좋습니다. 모든 알림은 예상대로 전달됩니다.

+0

감사합니다. Nikolai. 나는 시간을 내 코드 승/성공으로 쳐다 보았다. 그리고 당신의 의견은 나를 문제에 직접 인도했다. 옵저버는 DrawView 클래스의 initWithFrame 메소드에서 호출됩니다. 로깅을 사용하여 새 창이 열릴 때이 메서드가 호출되기 전에 "누락 됨"알림이 전송된다는 사실을 알았습니다. addObserver에 코드를 수정하여 알림을 수신 할 위치를 지정합니다. – roysolay