gpt4 book ai didi

ios - 核心数据多线程应用

转载 作者:IT王子 更新时间:2023-10-29 07:33:56 25 4
gpt4 key购买 nike

我正在尝试以多线程方式使用核心数据。我只是想在后台下载新数据时用以前下载的数据显示应用程序。这应该允许用户在更新过程中访问应用程序。

我有一个 NSURLConnection,它使用委托(delegate)异步下载文件(并显示进度),然后我使用 XMLParser 解析新数据并在单独的上下文中创建新的 NSManagedObjects,它有自己的 persistentStore 并使用单独的线程。

问题是在显示旧对象的同一上下文中创建新对象可能会抛出 BAD_INSTRUCTION 异常。因此,我决定为新数据使用一个单独的上下文,但我想不出一种方法可以在完成后将所有对象移动到另一个上下文。

Paolo 又名 SlowTree

最佳答案

The Apple Concurrency with Core Data documentation是开始的地方。读的真仔细……我被自己的误会咬了好多次!

基本规则是:

  1. 每个程序使用一个 NSPersistentStoreCoordinator。每个线程都不需要它们。
  2. 为每个线程创建一个 NSManagedObjectContext
  3. 永远不要将一个线程上的 NSManagedObject 传递给另一个线程。
  4. 相反,通过 -objectID 获取对象 ID 并将其传递给其他线程。

更多规则:

  1. 确保在获取对象 ID 之前将对象保存到商店中。在保存之前,它们是临时的,您无法从另一个线程访问它们。
  2. 如果您从多个线程更改托管对象,请注意合并策略。
  3. NSManagedObjectContext-mergeChangesFromContextDidSaveNotification: 很有帮助。

但是再说一遍,请仔细阅读文档!真的很值得!

关于ios - 核心数据多线程应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2138252/

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