2011-01-25 2 views
1

RootViewController (UITableViewController)는 매우 간단합니다. 그 안에있는 각 셀은 다른 사람에 대한 몇 가지 통계를 보여줍니다. 이러한 셀 중 하나를 눌러 DetailViewController (UIViewController)를 누르고 모델 객체에 저장된 통계를 수정할 수 있습니다. 해당 사용자에 대한 통계 수정이 끝나면 뒤로 버튼을 클릭하면 popViewControllerAnimated가 호출됩니다.DetailViewController에서 변경 한 후 UITableViewController의 셀 업데이트

내 질문은 : RootViewController에서이 플레이어의 통계가 변경되었다는 것을 아는 가장 좋은 방법은 무엇이며 그에 따라 셀을 업데이트 했습니까? RootViewController에 어떤 셀을 두드 리 었는지 기록한 다음 DetailViewController가 완료된 후 적절한 setNeedsDisplay를 호출해야합니까? 그렇다면 어떤 방법을 사용해야합니까? viewWillAppear?

아니면 더 좋은 방법이 있습니까? 이것은 꽤 일반적인 일처럼 보입니다. 그리고 나는 명백한 것을 놓치고 있습니다.

답변

2

이것은 모델이 설계된 방법과 핵심 데이터를 사용하는지 여부에 따라 다릅니다.

기본 원칙은 상세 뷰에서 변경 될 수있는 모델 객체의 특성을 관찰하는 것입니다. 세부 컨트롤러에서 무엇인가가 변경되면 테이블 셀을 더티라고 표시합니다. 그런 다음 테이블보기가 다시 표시되면 [tableView cellForRowAtIndexPath:]으로 변경된 셀을 가져 와서 셀을 다시 구성하십시오. cellForRowAtIndexPath: 메서드는 셀이 보이지 않으면 수동으로 nil을 반환하므로 필요하지 않은 셀을 업데이트하는 데 시간을 소비하지 않게됩니다.

Core Data를 사용하고 있다면 (아마도 있어야 할 것입니다.) NSFetchedResultsController이 거의 모든 작업을 수행합니다. 모델 개체를 관찰하고 변경된 각 셀에 대해 controller:didChangeObject:atIndexPath:forChangeType:newIndexPath: 메시지를 해당 대리인에게 보냅니다. 그런 다음 테이블 뷰를 적절하게 변경할 수 있습니다.

나는 쳤다 저장 확인란의 를 사용하여 코어 데이터와 탐색 기반 응용 프로그램 템플릿을 사용하여 새 Xcode 프로젝트를 생성하는 것이 좋습니다. 템플리트는 앞서 언급 한 패턴의 기본 구현을 기본으로합니다.

+0

정말 고마워! 아직 iOS 프로그래밍에 익숙하지 않아 CoreData를 아직 사용해 보지 않았습니다. 나는 테이블 셀을 더러운 것으로 표시함으로써 당신이 제안한 방식대로 작동하도록했습니다. –

관련 문제