gpt4 book ai didi

ios - 核心数据最佳实践——我在利用 C.D.正确有效? - iOS swift

转载 作者:行者123 更新时间:2023-11-28 09:30:57 25 4
gpt4 key购买 nike

我目前如何使用 Core Data:

我的应用程序加载:在此页面上,我创建了一个托管对象上下文,获取托管对象,并加载/显示它们。这是一个 TableView ,所以我允许删除。为了删除,我创建了一个托管对象上下文并删除了托管对象并重新加载了 TableView 。我的整个应用程序都使用相同的方法,还有其他操作,例如更新等。 要点是我为每个操作创建一个新的托管对象上下文。

我目前对 Core Data 的理解是,托管对象上下文有点像一个队列,其中填满了操作。其中,托管对象是正在修改并放入队列中以进行操作的项目。按照这个逻辑,整个应用不应该只有一个队列吗?

主要问题:

我是否需要在每个操作之前创建一个托管对象上下文?或者我可以创建一个托管对象上下文,在应用程序委托(delegate)中说完成启动了吗?并在整个应用程序中使用它?

编辑:

对于 future 的观众(如果我理解所提供的答案),我的代码现在通常如下所示:

  1. 我有一个核心数据类,在这个函数中创建了一个 ManagedObjectContext
  2. 创建 MOC 的函数在应用程序委托(delegate)中调用,成功后返回 MOC,然后我将其存储在单例中。
  3. 在我的整个应用程序中,因为我需要更改我的核心数据对象,所以我执行以下操作:

    if let managedContext = ShareData.sharedInstance.managedObjectContext {
    //DO STUFF,更新,删除,创建等等
    }

编辑 2:我可能误解了“不要在 App 委托(delegate)中创建 MOC”,目前正在研究这个问题并试图了解创建 MOC 的最佳位置。如果您可能启动应用程序的每个 View 都需要 MOC,那么在其他地方创建一个似乎很乏味。

最佳答案

我觉得有必要在 Fogmeister 的回答中添加少数报告:

  1. 在最新的SDK中,Core Data为我们提供了非常值得研究的NSPersistentContainer。您并不总是需要添加第三方依赖项来管理核心数据。我通常在第一个可见的 View Controller 中创 build 置,然后根据需要将该实例注入(inject)其他 View Controller 。不需要单例;如果您可以使用 persistentContainer 配置您的 VC,测试起来会容易得多。
  2. 使用此持久存储的 viewContext 获取请求。这在主队列上运行,适合驱动 UI。
  3. 可以通过调用 newBackgroundContext 向 persistentContainter 请求背景上下文。您可以在此队列上执行任何导入。当您保存它时,更改会自动传播到 viewContext。或者,使用容器的 performBackgroundTask() 方法,该方法采用闭包,它将在为您创建的后台队列上运行。

编辑添加

这是一个非常基本的示例,通过 NSPersistentContainerperformBackgroundTask 方法将数据保存在后台队列中。可以从Github下载:https://github.com/Abizern/so-41984004

关于ios - 核心数据最佳实践——我在利用 C.D.正确有效? - iOS swift ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41984004/

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