使用Core Data同步数据

时间:2013-01-16 15:29:21

标签: objective-c macos performance cocoa core-data

我正在将数据从iTunes写入Core Data。

现在,第一次同步大约需要10秒钟 但是,更新数据大约需要30秒 我的电脑有一个SSD,所以它最有可能在硬盘上更慢。

我正在做的是,我正在收集一系列歌曲,我必须为每首歌曲取一个内容以检查它是否已经存在于Core Data中,如果没有,我必须插入它。

知道某首歌是否已存在的唯一方法是检查persistentID 它基本上是用于识别的持久唯一ID。

我可以通过检查

来查看是否已添加歌曲
[NSPredicate predicateWithFormat:@"persistentID == %@", song.persistentID];

不是一个非常聪明的想法。

你有什么建议可以加快我的速度?

2 个答案:

答案 0 :(得分:2)

首先,获取您要比较的所有歌曲的ID。然后,您只需前往持久性商店即可获得新歌。

获取ID,

NSArray *allIDs = [existingSongs valueForKeyPath:@"persistentID"];

然后使用这样的谓词进行提取。

[NSPredicate predicateWithFormat:@"persistentID NOT IN %@", allIDs];

答案 1 :(得分:1)

第一次同步总是很短,因为它不会做任何获取请求。

核心数据喜欢: 批量请求 小批量

对于批量请求,Mundi已经完美地回答了这个问题。这个较小的集合将只是您需要更新的集合。

下一部分是指较小的批次。如果使用多线程分解,可以极大地加快更新速度。由于您正在保存并且我对数据集了解不多,请查看multi threaded core data tutorial on cimg