gpt4 book ai didi

iphone - 在后台获取核心数据

转载 作者:行者123 更新时间:2023-12-03 19:28:03 24 4
gpt4 key购买 nike

我有一个带有 TableView 的导航 View ,当单击一行时,行索引路径将传递到下一个 View 。

在详细信息 View viewDidLoad 中,我正在从 Core Data 获取数据。我使用从应用程序委托(delegate)获取

[appDelegate loadItem:i];

如您所见,我仅传递一个带有行号的整数。

问题是:我怎样才能在另一个线程中进行这个调用过程。(在后台)我需要这个,因为有时获取的结果太大,所以处理需要 3 秒延迟推送详细信息 View 。

我需要显示事件指示器三秒钟,因此我需要将 Fetch 放入另一个线程中,以便能够在处理 fetch 时使用指示器的 UI。

我想要最简单的方法,因为我是新手。发布一些代码会很棒。或链接:)

最佳答案

混合多线程和核心数据并不是一项简单的任务。 "Multi-Threading with Core Data" Core Data 编程指南的部分描述了如何在多个线程上与 Core Data 交互,包括所有需要注意的事情。

基本上,您需要为每个线程创建一个单独的托管对象上下文。这些上下文可以共享对一个托管对象模型和持久存储的访问。对于您的情况,他们建议如下:

You use two managed object contexts associated with a single persistent store coordinator. You fetch in one managed object context on a background thread, and pass the object IDs of the fetched objects to another thread. In the second thread (typically the application's main thread, so that you can then display the results), you use the second context to fault in objects with those object IDs (you use objectWithID: to instantiate the object).

听起来,BackgroundFetching 示例应用程序展示了如何执行此操作,但我的系统上没有它。

但是,在您对获取请求进行多线程处理之前,我会仔细研究一下为什么加载需要这么长时间。我首先建议在 NSFetchRequest 上使用 -setFetchBatchSize: 来限制通过 fetch 加载到内存中的对象数量(这也会节省大量内存)。接下来,我将使用 -setPropertiesToFetch: 将获取的属性限制为仅您将立即使用的属性。

关于iphone - 在后台获取核心数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1733117/

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