문제

핵심 데이터를 사용하여 상당히 복잡한 iPhone 앱을 만들고 있습니다. 지금까지 상황이 잘 작동했습니다. 그러나 앱이 더욱 복잡해지면서 새로운 문제가 발생했습니다. 첫 번째 View 컨트롤러는 AppDelegate가 ApplicationDidFinishLaunching 메서드를 반쯤 시작하기 전에 ViewDidload 메소드를 완료하고 있습니다.

보기 컨트롤러는 루트가 아니며 탭 막대 컨트롤러입니다. 문제의 VC는 탭 막대에서 기본값 선택한 탭의 VC입니다. IB에 의해 인스턴스화되고 있습니다.

내 경험에 따라 이와 같은 것은 없었으며, 제가 AppDelegate에서하고있는 중요한 초기화를 버리고 있습니다 (핵심 데이터에서 객체를 가져 와서 사용 준비). 또한 간헐적이며 때로는 대의원입니다 하다 먼저 끝내십시오.

다른 사람이 이런 어려움을 발견 한 사람이 있습니까? 그러한 문제를 다루는 샘플 코드가 있습니까?

답은 AppDelegate가 준비된 메시지를 보낼 때만 AppDelegate가 준비중인 데이터를 VC에로드하는 것이라고 가정합니다. 나는 이것이 나중에 엉덩이에 나를 물린 것을 추가하고 있다는 것이 약간 걱정된다.

도움이 되었습니까?

해결책

이와 같은 레이스 조건을 피하기 위해 사용하는 솔루션은 데이터가로드되고 검증 될 때까지 응용 프로그램의 기능적 UI를 참조하는 것입니다. 내 -applicationDidFinishLaunching의 상단에서 : 메소드, 다음을 수행합니다.

  1. 하위 뷰로 Ui -Window를 만듭니다.
    • 서브 뷰가있는 default.png의 uiimageview :
      • 프레임을 중심으로 한 uiactivityIndicatorView (및 애니메이션)
  2. Wind
  3. 모든 데이터로드 및 검증 (네트워크 활동 포함)을 수행하십시오.
  4. 기본값의 바로 아래의 하위 뷰로 UI의 기본보기를 창에 만들고 추가 한 다음 슈퍼 뷰에서 사라지고 제거됩니다.

4 단계를 구현하는 방법 (서브 루틴 호출, 비동기 알림, 키 가치 관찰 등)은 전적으로 귀하에게 달려 있습니다. 중요한 것은 필요한 데이터 구성 요소의로드에 따라 부여 된 모든 UI 구성 요소의 로딩을 만드는 아이디어입니다.

이를 통해 데이터에 대해 걱정하지 않고 모든 UI 코드를 작성할 수 있습니다. 이는 어쨌든 MVC 애플리케이션에서 수행하려는 작업입니다.

다른 팁

앱 대의원 초기화가 완료되면 an NSNotification - 이것은 마지막 일 것입니다 applicationDidFinishLaunching 방법은 아마도 할 것입니다.

동일한 앱 대의원에게 해당 알림을 듣고 선택자를 해고하십시오. loadViewController, 그런 다음 뷰 컨트롤러를로드합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top