2010-03-04 4 views
5

Apple Mail 응용 프로그램을 예로 사용합니다. 핵심 데이터를 사용하는 척하십시오. 이메일 계정을 터치하면 해당 계정에있는 모든 메시지가 표시됩니다. 따라서 컨트롤러는 해당 계정의 모든 메시지를 가져 오기 요청을 수행했습니다.탐색을위한 핵심 데이터 모범 사례 질문 iPhone App

메시지를 터치하고 한 단계 더 깊이 드릴하면 이제는 하나의 메시지 만 볼 수 있습니다. 이 단일 메시지는 아마도 메시지 목록 컨트롤러에서 전달되었지만 오른쪽 상단의 삼각형을 클릭하여 동일한 이메일 계정에있는 모든 메시지를 이동할 수도 있습니다. 즉, 단일 전자 메일 메시지를 보는보기 컨트롤러에도 똑같은 메시지 목록이 필요합니다.

따라서 목록 뷰에서 가져 오기 요청 로직을 잘라내어 붙여 넣을 수 있지만 DRY/반복하지 않는 것이 좋습니다.

이 문제를 해결하기위한 최선의 방법에 대한 제안이 있으십니까?

답변

2

이 문제를 해결하기 위해 사용한 솔루션은 대리인 디자인 패턴을 사용하는 것입니다. 즉, rootViewController 및 detailViewController가있는 응용 프로그램에서 rootViewController는 detailViewController의 대리자 역할을합니다.

예를 들어, 사용자가 (상세보기에서) 전자 메일 메시지를 볼 때 버튼을 클릭하여 새 메시지를 반복하면 detailViewController는 rootViewController가 필요로하는 대리자 방법을 통해 rootViewController에 알립니다 새 메시지를 표시합니다.

이렇게하면 detailViewController만이 모든 모델 객체 (표시된 이메일)에 대한 정보를 알아야합니다. rootViewController는 나머지 객체를 포함하는 상호 작용을 처리합니다.

내게있어, 이것은 책임의 훌륭한 부분이므로,이 솔루션을 사용하고 있습니다.

2

메시지를 관리 할 개체를 만든 다음 해당 개체와 상호 작용하여 모든보기 컨트롤러에 필요한 메시지를 가져옵니다. 이렇게하면 나중에 결정한 경우 View Controller 논리를 변경하지 않고 CoreData에서 전환 할 수도 있습니다.

+0

제안에 대해 Jesse에게 감사드립니다. 내가 작업하고 있던 앱의 경우, 이것은 과도한 공격이라고 생각합니다. 상대적으로 간단한 앱이므로 가능한 한 템플릿 코드를 고수하고 싶습니다. 하지만 솔루션은 복잡한 애플리케이션에 매우 유용 할 것 같은데요. – robenk