Objective c 异步获取大量资源,并;异步地;将它们保存到数据库中。使用哪种好模式?(网络、核心数据)

Objective c 异步获取大量资源,并;异步地;将它们保存到数据库中。使用哪种好模式?(网络、核心数据),objective-c,core-data,asynchronous,synchronization,moc,Objective C,Core Data,Asynchronous,Synchronization,Moc,我需要用注释填充我的地图。每个批注都有从远程服务器获取的相应位置资源。每个位置都有相关的类别-它也是作为一个单独的资源从服务器获取的 让我们假设要填充一个给定的区域,我需要获取100个位置,每个位置属于20个类别中的一个(实际上它们的数量要多得多) 我使用AFNetworking获取这两种资源。我尝试缓存位置和类别以供脱机使用,所以在注释显示在地图上之前,我将获取的资源写入核心数据表 每个地点都按需检索其关联的类别资源,我需要在“地点”表中写入地点,并在“类别”表中写入类别 由于抓取是异步进行的

我需要用注释填充我的地图。每个批注都有从远程服务器获取的相应位置资源。每个位置都有相关的类别-它也是作为一个单独的资源从服务器获取的

让我们假设要填充一个给定的区域,我需要获取100个位置,每个位置属于20个类别中的一个(实际上它们的数量要多得多)

我使用AFNetworking获取这两种资源。我尝试缓存位置和类别以供脱机使用,所以在注释显示在地图上之前,我将获取的资源写入核心数据表

每个地点都按需检索其关联的类别资源,我需要在“地点”表中写入地点,并在“类别”表中写入类别

由于抓取是异步进行的,所以在将特定类别写入表时,我不知道是否有另一个位置的“线程”尝试将相同的关联类别写入“类别”表

因此,问题是:当需要使用异步检索的信息填充核心数据表时,使用核心数据表的模式是什么?具体来说,任何要编写类别的给定线程如何知道已经有一个线程在尝试这样做

更新1:我目前的问题是,目前我有重复的类别。我的猜测是,显然,每个试图写作的类别都不知道同一类别的平行写作

更新2:我的案例最简单的描述如下:

我在一个线程中创建了一个新的类别实体,其中包含一些字段,同时在另一个线程中,我创建了完全相同的类别实体,其中包含相同的字段,目的是像第一个线程一样成为相同的类别对象

一个线程在调用[managedObjectContext save:&error]时获胜,但在PersistentStore中出现实际记录之前,第二个线程也会调用save。问题是:如何防止“类别”表中的记录重复

更新3:我正在考虑使用托管对象上下文的两种变体:1)由所有线程重用一个共享moc实例2)在每个线程上实例化一个新的moc

谢谢

官方答案是关于使用
NSOperationQueue
和/或采取手动步骤确保对
NSManagedObjectContext
的所有访问都发生在创建上下文的同一线程上。为了实现这种方法,您可以遵循许多方法

另一种选择是,github上有一个可以为您实现这一点的平台。如果您使用它,它将自动同步您的数据库操作,这样您就不必担心其他线程是否正在对上下文执行某些操作。您可以在输入时插入内容,框架将确保您的操作被转换为不会导致核心数据爆炸的内容


完全披露:我构建了github项目。

谢谢你的回答。在尝试引导您的扩展之前,我将在这里提出一个关于管理共享上下文的问题。