2014-06-15 3 views
0

전에이 이분법을 깨닫지 못해서 물어볼 필요가 있습니다. public 속성을 통해 NSArray 객체를 노출시키는 일종의 모델 관리자 클래스가 있다고 가정 해 보겠습니다. 이것이 우리의 모델입니다. 이제이 배열의 멤버를 tableview 셀에 표시하는 뷰 컨트롤러도 있습니다. 이 NSArray를 tableview의 데이터 소스로 설정합니다. 그러나 내 모델 변경 데이터를 제 시간에 맞추려면 어떻게해야합니까?NSArray 모델을 변경 가능하거나 변경할 수 없습니까?

두 가지 옵션이 있습니다. 1) 배열을 변경할 수있게 만드십시오. 2) 인스턴스 NSArray를 새 데이터가 들어있는 다른 인스턴스로 바꿉니다.

옵션 1의 문제는 아무나 배열의 내용을 잘못 변경할 수 있다는 것입니다. 옵션 2의 문제는 tableViewController가 원래 배열 인스턴스를 계속 가리키며 관리자 클래스가 이제는 새 인스턴스를 가리키고 있다는 것을 무시합니다 (이는 업데이트 된 데이터가있는 속성 배열 인스턴스로 바뀌었기 때문입니다).

요약하면 모델 관리자에서만 변형 될 수있는 배열 인스턴스가 필요하지만 외부 세계에서는 변경할 수 없습니다. 어느 것이 불가능한가? 모든 아이디어가이 문제를 해결하는 방법?

+0

이 방법이 도움이됩니까? http://stackoverflow.com/a/10436587/3501220 – lucianomarisi

답변

2

배열을 관리하는 개체도 테이블 뷰의 데이터 소스 여야합니다. 그렇지 않으면 테이블 뷰의 데이터 소스는 테이블 뷰가 데이터를 다시로드하기 전에 항상 배열을 관리하는 개체에서 배열의 최신 복사본을 가져와야합니다 .

어느 쪽이든, 테이블 뷰의 데이터 소스가 사용중인 배열은 결국 변경 불가능한 배열이어야하고이 배열이 변경 될 때마다 reloadData에 대한 호출이 즉시 이루어져야합니다.

이렇게하면 데이터를 표시하는 테이블보기의 중간에 배열의 데이터가 수정되지 않습니다. 예를 들어, numberOfRowsInSection:이 호출 된 후 배열의 내용이 변경되면 매우 문제가됩니다.

관련 문제