2011-04-18 3 views
0

시스템 사운드를 재생 한 후에 네이티브 c 함수에 대한 콜백을 수행하는 응용 프로그램을 개발 중입니다. 이런 일이 발생하면 이벤트를 발생시키고 자합니다. 따라서 내 뷰의 가입자가이를 처리 할 수 ​​있습니다.네이티브 C 함수 내부에서 이벤트 발생?

-(void) completionCallback(SystemSoundID mySSID, void* myself) { 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"SoundFinished" object: myself]; 
} 

내가보기에

unrecognized selector sent to instance ...을받을 나는 다음과 같은 코드가 있습니다 오브젝티브 -C에

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

...

-(void) soundStopped: (NSNotification*) notification { 
    NSLog(@"Sound Stopped"); 
} 

나는 매우 새를, 나는 어디로 잘못 가고 있니?

업데이트 정확한 오류는 다음과 같습니다

2011-04-18 19:27:37.922 AppName[5646:307] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[BackgroundTestViewController soundStopped]: unrecognized selector sent to instance 0x13b4b0' 
+1

두 번째 오류의 이유는 매크로가 [[[NSNotificationCenter] defaultCenter]] –

+0

으로 확장된다는 것입니다. @Chris가 말한 것에 유의하십시오. 'center' 매크로는 객체를 나타내므로 [[center] post ...]' '[[obj] method ...]'와 같이 유효하지 않은 구문입니다. 'completionCallback()'에서'[[center] post ...]'를'[center post ...]'로 변경하십시오. –

+0

@Chris Thanks - 해결하기 위해 노력하고있는 실제 문제가 아니기 때문에이 문제를 제거했습니다. –

답변

3

-soundStopped-soundStopped:은 두 개의 다른 메소드 이름입니다. 콜론은 메서드 이름의 일부이지만 -addObserver:selector:name:을 호출하면 콜론이 제외됩니다.

2

문제는 (당신이 관찰자에 의해 처리되지 않는 선택을 등록) 알림 처리기입니다. 관찰자를 추가하는 방법을 보여주세요. "일반 C"기능에서 알림을 보내는 데는 문제가 없습니다.

+0

처리기 코드를 게시했습니다. –

+0

제가 생각하기에, addObserver에서 셀렉터 이름이 잘못되었습니다 - Caleb의 수정 사항에 대한 답변을 참조하십시오. –