gpt4 book ai didi

iOS - 核心数据 - 完成处理程序

转载 作者:行者123 更新时间:2023-11-28 22:58:29 25 4
gpt4 key购买 nike

概览

  • 我有一个使用核心数据的 iOS 项目
  • 核心数据由 View Controller 和通知使用

实现

  • 为名为 DatabaseEngine 的数据库事件创建了一个单例类
  • 在appDelegate didFinishLaunchingWithOptions中,DatabaseEngine被实例化
  • DatabaseEngine 包含 View Controller 和通知的属性(委托(delegate))
  • 在 View Controller 的 viewDidLoad 中,我将 DatabaseEngine 委托(delegate)设置为 View Controller 实例
  • 一旦数据库打开,完成处理程序(通过委托(delegate)属性)调用方法来设置 View Controller 和通知

关注(时间问题)

  • 我担心可能存在这样的情况(时间问题),其中首先创建了 DatabaseEngine,而此时 View Controller 的 viewDidLoad 不会被执行,并且因此 DatabaseEngine 委托(delegate)不会初始化,因此数据库将执行 completionHandler 但由于委托(delegate)为 nil,因此不会完成任何任务

我做了什么来解决这个问题

  • 在 View Controller 的 viewDidLoad 中,我正在检查数据库是否启动以及 View Controller 是否未加载,如果是,则我再次执行任务(设置 View Controller 的 View )。

注意-我没有明确使用线程,但根据我的理解,completionHandler 是异步执行的。

问题

  1. 我试过几次, View Controller 数据加载正确,似乎没有时间问题。我什至尝试循环一个大的值(以创建延迟),但仍然没有计时问题。我想知道为什么?
  2. 我的实现是好的设计还是有更好的方法?
  3. 这是解决我的问题的正确方法吗?

最佳答案

您的设计有点复杂,但看起来很可靠。 (我更喜欢让应用委托(delegate)管理核心数据,但如果您愿意,您的方法也一样好。)

但是,我会使用 DatabaseEngine 类的惰性初始化的常用模式。这样,当它被需要但实际上不存在时,它将创建自己并执行必要的初始化例程,而 View Controller 将等待直到对引擎的调用返回一些东西。

// in view controller viewDidLoad, e.g.
self.managedObjectContext = [databaseEngine managedObjectContext];

如果上下文没有初始化,就会在这里发生。

关于iOS - 核心数据 - 完成处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10363972/

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