2014-02-12 2 views
0

내 viewcontrollers에서 모델의 복잡성을 숨기는 내 facade 클래스에서 알림을 보냅니다. 이제 첫 번째 탭에 탐색 컨트롤러가있는 간단한 탭 barcontroller가 있습니다. 지금까지 그렇게 좋은, 아주 전형적인 디자인. 이제이 탐색 컨트롤러에는 스택에 두 개의보기 컨트롤러가 있습니다. 테이블 뷰가있는 루트 MainViewController와 뷰가 몇 개인 DetailViewController.아무 이유없이 NSNotifications의 발송 테이블이 삭제되었습니다.

mainViewController는 viewDidLoad의 4 가지 알림에 대한 옵저버입니다. 각 알림에 대해 네 가지 처리 방법이 있습니다. dealloc에서 이러한 알림을 등록 취소합니다.

문제는 mainViewController에서 tableViewCell을 선택하면 detailViewController가 스택에 푸시되고 메인 뷰 컨트롤러가 돌아 오는 시점에 뒤로 버튼을 누르면 mainViewController가 관찰자에서 제거됩니다. Notifications Dispatch 테이블을 사용하면 실제로 그러한 알림을 등록 취소하는 것과 같습니다.

왜 이런 일이 발생합니까? 그것은 디자인에 의한 것입니까, 아니면 뭔가 빠져 있습니까?

mainViewController의 인스턴스가 파괴되지 않고 탐색 스택에 여전히 존재하며 dealloc이 호출되지 않았으므로 왜 등록이 취소됩니까?

신속하고 더러운 솔루션은 viewWillAppear에 그 통지에 등록을 넣어하지만,이 등록 코드가 불필요하게 실행 나는 그것을 좋아하지 않아 여러 번 (viewDidLoad에 충분합니다.)

어떤 도움을?

+0

이것을 어떻게 결정 했습니까? "mainViewController가 알림 발송 테이블에서 옵저버로 제거 된 바로 그 순간에"? –

+0

스파크 검사기를 사용했습니다. –

답변

0

[이, 사과 비스듬한 대답의 일종이다.]

나는 당신이 일을 표준 애플의 방식에 만족하지 같은데요, 그리고 더 나은 뭔가를 찾을하려고합니다. 그렇다면 혼자가 아닙니다.

이들에 대해 잘 모르는 경우 "Model View ViewModel" 개념 ReactiveCocoaReactiveViewModel을 확인하시기 바랍니다. ReactiveCocoa는 가파른 개념 절벽이 될 수 있지만, 이미 모험을하고 있다면 체크 아웃 할 가치가 있습니다.