2013-11-21 5 views
0

초기 장면으로 TabBarController가 있습니다. 모든 탭은 기본적으로 동일한 정보를 사용합니다. 이 정보는 런타임에만 사용할 수 있으며 json을 통해 검색됩니다. 정보는 내 앱에 의해 변경되지 않지만 반대편에서 변경 될 수 있으며 다음에 새로 고침 할 때 달라질 수 있습니다.TabBarController에 대한 데이터 소스로 싱글 톤을 피해야합니까? (그리고 어떻게 할 수 있습니까?)

싱글 톤에 대한 유효한 사례입니까?

은 내가 TabBarController 작성하고 탭에게 전달되기 전에 정보를로드에 대해 생각했지만, 지금은 몇 가지 단점에 직면하고있다 : (큰 AFAIK으로 모두의 앞에)

  • UI가 채워지기 전에 검색이 이루어지며 느린 연결로 시간이 걸릴 수 있습니다.
  • 백만 건의 알림 없이는 정보를 새로 고침 할 수 없습니다. 계층 구조로 다시 전달할 수 없기 때문입니다.
  • 앱을 시작/오프라인으로 작업 할 수 없으며 나중에 온라인으로 전환 할 수 없습니다.
  • 모든 탭 초기화를 덮어 써야하기 때문에 스토리 보드 TabBarController에서 작동하지 않습니다.

정보를 담고있는 단 하나의 단점으로 내가 지금까지 볼 수있는 단점은 내가 직접 가리키면 UI가 엉망으로 보이게 만들 수 있다는 것입니다. 그러나 나는 정말로 유혹하는 모든 탐색 계층에서 모든 액세스 권한을 갖습니다.

다른 가능한 솔루션/최상의 방법으로 TabBarController 내에서 데이터를 공유하는 방법이 있습니까?

나는 단어 싱글 톤 사용이 즉시 종료되지 않습니다 희망

... :)

+0

탭 표시 줄 컨트롤러를 서브 클래 싱하고 모든 콘텐츠 컨트롤러의 데이터 소스로 사용하는 방법은 어떻습니까? 공식적으로는 싱글 톤이 아닌 기능적으로는 데이터를 필요로하는 모든 컨트롤러가 viewControllers 배열의 일부인 경우 작동해야합니다. – rdelmar

+0

네, 가능 합니다만, 내가 말했던 "단점"중 일부가있을 수 있습니다. 나는 스토리 보드 scences와 다른 애플 리케이션에서 이것을 시도 하고이 문제를 만났 : http://stackoverflow.com/questions/17532763/modify-storyboardtabbarcontroller-tabs-before-the-first-tab-loads (요약 : viewcontrollers 배열) tab35controller에서 비어 있습니다. – drUniversalis

+2

당신의 문제는 (당신의 링크 된 질문에서) self.tabBarController.viewControllers를 사용했다는 것입니다 - 당신은 탭 바 컨트롤러 내에서 self.viewController를 사용해야합니다. – rdelmar

답변

1

싱글 톤이 작동하고 적절한 간주 될 수 -하지만 탭 표시 줄 컨트롤러의 데이터 소스로. 당신이 말하는 것은 싱글 톤 데이터 컨트롤러가되어야합니다. 모델 데이터를 소유하고 업데이트/변경을 트리거하는 메소드를 제공 할 수 있습니다. 변경 사항에 대한 알림을 게시 할 수 있습니다 (현재 변경 사항에 관심이있는보기 컨트롤러의 수를 알 필요가 없습니다).

+0

네, 그건 나쁜 표현이었습니다. 싱글 톤이 내 모델 데이터를 보유하게됩니다. 어떤 대안이 있습니까? SQL 데이터베이스처럼? – drUniversalis

+0

수 있습니다. 데이터베이스를 가지고 있더라도 싱글 톤 컨트롤러에서 랩핑하는 것을 선호하므로 뷰 컨트롤러에 영향을주지 않고 인터페이스를 중재하고 내용을 변경할 수 있습니다. – Wain