gpt4 book ai didi

iphone - View Controller 的 viewDidLoad 方法在 applicationDidFinishLaunching 之前完成

转载 作者:行者123 更新时间:2023-12-03 21:23:45 27 4
gpt4 key购买 nike

我正在使用 Core Data 创建一个相当复杂的 iPhone 应用程序。到目前为止,一切进展顺利。然而,随着应用程序变得越来越复杂,一个新问题出现了:第一个 View Controller 在 AppDelegate 完成其 applicationDidFinishLaunching 方法的一半之前完成其 viewDidLoad 方法。

View Controller 不是根 Controller ,它是一个标签栏 Controller 。所讨论的 VC 是选项卡栏上默认选择的选项卡的 VC。它正在被 IB 实例化。

根据我的经验,以前从未发生过类似的情况,并且它导致我在 AppDelegate 中所做的重要初始化(从 Core Data 获取对象并准备使用它们)。此外,它是间歇性的——有时委托(delegate)确实先完成。

还有其他人注意到这样的困难吗?有处理此类问题的示例代码吗?

我认为答案是让 VC 仅在 AppDelegate 发送准备就绪的消息时才加载 AppDelegate 准备就绪的数据。我有点担心这添加的东西最终会在以后咬我的屁股。

最佳答案

我用来避免此类竞争条件的解决方案是完全放弃引用应用程序的任何功能 UI,直到加载并验证数据为止。在我的 -applicationDidFinishLaunching: 方法的顶部,我执行以下操作:

  1. 创建一个带有 subview 的 UIWindow:
    • 带有 subview 的 Default.png 的 UIImageView:
      • 位于框架中心的 UIActivityIndi​​catorView(并且具有动画效果)
  2. 设置窗口键和可见性,以便用户尽快获得视觉反馈,表明在 UI 加载之前正在进行一些数据处理。
  3. 完成所有数据加载和验证(可能包括网络事件)
  4. 创建 UI 的主视图并将其添加到窗口中,作为 Default.png View 正下方的 subview ,然后该 View 会淡出并从其 super View 中删除。

如何实现第 4 步(子例程调用、异步通知、键值观察等)完全取决于您。重要的是让任何 UI 组件的加载取决于任何所需数据组件的加载。

这使您可以编写所有 UI 代码,而不必担心数据,这正是您希望在 MVC 应用程序中执行的操作。

关于iphone - View Controller 的 viewDidLoad 方法在 applicationDidFinishLaunching 之前完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2436317/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com