1

내 목표는 대리점 위치를지도와 테이블 뷰의 두 가지 방식으로 표시하는 것입니다.iOS Container ViewController 데이터 흐름

저는 두 개의 하위보기 컨트롤러 인 DealersMapViewController 및 DealersListViewroller를 포함하는 컨테이너보기 컨트롤러 (DealersViewController)가 있습니다. 사용자는 탐색 모음에있는 UISegmentedControl을 사용하여 VC간에 전환 할 수 있습니다. 지도 주석 또는 표 뷰 셀을 탭하면 DealersDetailViewController가 푸시됩니다.

스위칭이 이미 구현되어 (Changing view controller when Segmented Control changes의 코드를 사용하여) 세부 사항을 푸시하는 것처럼 잘 작동하는 것 같습니다.

개선하고 싶은 점은 컨테이너와 하위 사이의 데이터 흐름입니다. 딜러 위치는 부모의 인터넷에서 JSON으로 다운로드되고 완료되면 NSArray * locations 속성이지도 VC와 목록 VC에 설정됩니다. 이 배열에는 AFNetworking에 의해 자동으로 생성 된 사전 개체가 위치 데이터 (각 위치 사전에는 MKAnnotation 프로토콜을 따르는 제목, 부제, 위도, 경도뿐만 아니라 이미지 및 설명 등)도 포함됩니다.

내 질문은 : 어떻게 컨테이너 VC와 두 자식 VC가 위치 데이터가 어떻게 구성되어 있는지 '확신 할 수 있습니까? 이론적으로 누군가가 컬렉션 뷰에서 딜러 위치를 보여주는 컨테이너에 추가 할 다른 하위 뷰 컨트롤러를 개발하려는 경우 어떻게 데이터를 예상 할 수 있는지 공식적으로 알 수 있습니다. Apple은 다음과 같이 말합니다. "컨테이너가 메소드 나 속성을 선언 할 때 자식이 필요하면이를 시행 할 프로토콜을 정의해야합니다." 나는 아이들이 위치 속성을 선언하도록 강요 할 수 있지만 배열에는 어떤 것도 포함될 수 있습니다 ...

어쩌면 부모가 자식을위한 데이터 소스가 될 수 있을까요? 나는 아직이 접근법을 시도하지 않았다.

아마도 과도하게 복잡해졌지만 내 목표는 재사용 가능한 구성 요소를 적절하게 만들고 또한 사용자 지정 프로토콜/대리인 및 디자인 패턴과 같은 것들을 일반적으로 사용하는 방법을 배우는 것입니다.

감사합니다.

답변

0

올바르게 이해하면 모든 컨트롤러가 동일한 이해를 갖도록 데이터가 구조화되어 있습니다.

아마 가장 좋은 방법은 사용자 지정 위치 클래스를 만들고 JSON을 해당 클래스의 인스턴스로 deserialize 한 다음 적절하게 전달하는 것입니다. deserializing하는 방법을 몇 가지 방법이 있지만, JSON Model은 자동으로 처리하는 좋은 예입니다.

Tl; dr : JSON 사전을 맞춤 클래스로 변환 한 다음 속성이나 위임을 통해 더 편리하게 찾을 수있는 방식으로 하위보기 컨트롤러에 전달합니다.

+0

Adis의 대답은 Objectify (http://tigerbears.com/objectify/)를 참조하십시오. JSON 데이터 구조에서 NSObject 모델을 생성하는 데 도움이 될 것입니다. – dezinezync

+0

감사합니다. 위임/데이터 소스 접근법 (내가 적절하다고 생각하기 시작한 방식)을 사용한다면 부모는 데이터를 제공 할 준비가되었음을 자녀에게 어떻게 알 수 있습니까? (즉, JSON 다운로드 완료) – LorTush

+0

프로토콜을 사용하는 경우 상위 뷰 컨트롤러의 하위 대리자를 만들고 데이터 다운로드가 완료되면 호출 할 메소드를 작성하기 만하면됩니다. [self.mapDelegate updateLocation : myLocation]; 행에있는 내용 – Adis

관련 문제