2012-09-12 3 views
3

iOS 애플리케이션에서 접을 수있는 테이블 뷰를 구현하려고합니다. 이렇게하려면 NSNotification을 부모 컨트롤러에 전달하는 섹션 헤더에 제스처 인식기를 설정 한 다음 확장 된 뷰를 표시하는보기를 새로 고칩니다. 부모 컨트롤러는 다음과 같은 오류가 발생하는 원인이됩니다의 메시지를 수신 할 때까지NSNotification을 보내는 중 인식 할 수없는 셀렉터

모두가 작동합니다

'+[MasterViewController receiveTestNotification:]: unrecognized selector sent to class 0xa92a8' 

이 사이트에 주위를 둘러 보았다이 오류에 관한 몇 게시물을 발견했습니다,하지만 내가 그 실수를 저 지르지 않는다고 말할 수있는 한.

내 등록은 컨트롤러의 초기화에서 발생하고 다음과 같습니다

내가 전화 할 수신기 방법이 서명이
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveTestNotification:) name:@"RefreshNavigation" object:nil]; 

:

- (void) receiveTestNotification:(NSNotification *) notification 

난과 같이이 알림을 보내을하는 섹션 헤더로 사용하고있는 UIView의 사용자 정의 하위 클래스에 있습니다.

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

발견 한 예제는이 정확한 구성을 가리 킵니다. 나는 컨트롤러가 그 후 곧 앱 전체에서 사용되기 때문에 할당이 취소되지 않는다는 것을 확신합니다.

내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까?

답변

10

오류 메시지는 MasterViewController 인스턴스가 아닌 MasterViewController 클래스로 알림을 보내고 있음을 나타냅니다. receiveTestNotification:이 클래스 메소드가 아닌 인스턴스 메소드이기 때문에 오류가 발생합니다.

이 인스턴스가 아닌 클래스 자체를 참조하므로 initialize 메서드 내에서 알림을 등록하는 것이 문제라고 생각합니다.

Here is a very similar previous question 해결책은 대신 인스턴스 메서드 인 init 메서드에서 알림을 등록하는 것이 었습니다.

+1

영광스런! 그거였다! 구독 호출을 viewdidload 메서드로 옮기고 이제는 작동합니다. 고맙습니다. –

+0

"문제는 클래스 메서드 인 initialize 메서드 내에서 알림을 등록한다는 것입니다. 따라서 해당 컨텍스트에서 self는 인스턴스가 아니라 클래스 자체를 참조합니다." -이 말이 맞아. –

관련 문제