내 viewcontrollers에서 모델의 복잡성을 숨기는 내 facade 클래스에서 알림을 보냅니다. 이제 첫 번째 탭에 탐색 컨트롤러가있는 간단한 탭 barcontroller가 있습니다. 지금까지 그렇게 좋은, 아주 전형적인 디자인. 이제이 탐색 컨트롤러에는 스택에 두 개의보기 컨트롤러가 있습니다. 테이블 뷰가있는 루트 MainViewController와 뷰가 몇 개인 DetailViewController.아무 이유없이 NSNotifications의 발송 테이블이 삭제되었습니다.
mainViewController는 viewDidLoad의 4 가지 알림에 대한 옵저버입니다. 각 알림에 대해 네 가지 처리 방법이 있습니다. dealloc에서 이러한 알림을 등록 취소합니다.
문제는 mainViewController에서 tableViewCell을 선택하면 detailViewController가 스택에 푸시되고 메인 뷰 컨트롤러가 돌아 오는 시점에 뒤로 버튼을 누르면 mainViewController가 관찰자에서 제거됩니다. Notifications Dispatch 테이블을 사용하면 실제로 그러한 알림을 등록 취소하는 것과 같습니다.
왜 이런 일이 발생합니까? 그것은 디자인에 의한 것입니까, 아니면 뭔가 빠져 있습니까?
mainViewController의 인스턴스가 파괴되지 않고 탐색 스택에 여전히 존재하며 dealloc이 호출되지 않았으므로 왜 등록이 취소됩니까?
신속하고 더러운 솔루션은 viewWillAppear에 그 통지에 등록을 넣어하지만,이 등록 코드가 불필요하게 실행 나는 그것을 좋아하지 않아 여러 번 (viewDidLoad에 충분합니다.)
어떤 도움을?
이것을 어떻게 결정 했습니까? "mainViewController가 알림 발송 테이블에서 옵저버로 제거 된 바로 그 순간에"? –
스파크 검사기를 사용했습니다. –