6

라고하지 다른 클래스에서 다음 NSNotificationCenter 선택기가 하나 개의 클래스에서 나는 알림에 등록, 내 아이 패드 응용 프로그램에서

- (void)selectedList:(NSNotification*)notification 
{ 
    NSLog(@"received notification"); 
} 

(A UITableViewController) 행을 선택하면 해당 알림을 게시합니다.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSLog(@"posting notification"); 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"TTSelectedList" object:nil]; 
} 

콘솔에 "게시 알림"이 기록 되었기 때문에 알림이 게시되었음을 확인할 수 있지만 "수신 알림"은 호출되지 않습니다. 즉 알림이 수신되지 않고 선택기가 호출되지 않았 음을 의미합니다. 나는 이것이 무엇을 일으키는 지 알 수 없다.

감사

+1

어리석은 짓이긴하지만 잠시 동안 나를 혼란스럽게 만들었습니다. 나는 같은 문제가 있었다. 내 경우, 하위 클래스가 부모 클래스에서 선언하려고했던 것과 동일한 선택자를 가진 메소드를 가지고 있다는 것을 알지 못했습니다. –

+0

나 자신이 있었거나 무언가 바보 같았다 : 대문자 대신 소문자로 공지를 게시했다. 그들은 대소 문자를 구분합니다! –

답변

14

원인은 당신이 실제로 addObserver:selector:name:object:를 호출하지 않을 것입니다. 거기에 로깅 줄이 없습니다. 코드가 실행되고 있습니까?

두 번째로 가능한 원인은 알림을 게시하기 전에 removeObserver:으로 전화하는 것입니다. 가장 일반적으로는 dealloc입니다. (무엇이라도 본 적이 있다면 항상으로 전화하십시오. removeObserver) 여기서 오류는 관찰 전에 관찰 객체가 알림 전에 할당 취소 된 것입니다.

+0

당신이 맞았습니다. 인터페이스 빌더에서 옵저버 인 객체를 만들고 있었고 아무것도 유지하지 못했습니다. 감사. – indragie

+0

나는 똑같은 문제가 있었다. initWithStyle 대신에'init' 메소드에 옵저버를 추가했습니다. – testing

+1

IB를 사용하여 물건을 만드는 경우, init이 호출되지 않을 가능성이 있습니다. 원하는대로 initWithCoder 또는 awakeWithNib를 사용하십시오. – futureelite7