2

我环顾四周,找不到以下问题的完整答案。

我计划构建一个 iOS 应用程序,它将处理 UserData 并通过初始包提供 SeedData。已经有一篇有用的帖子介绍了如何共同使用位于两个不同持久存储中的两个数据库。就我而言,它只对部分问题作出反应。

我希望能够提供各种 SeedData 集以允许存储空间管理,因为数据集相当大,尤其是多媒体材料。

基本上,SeedData 将根据标准进行拆分并可供下载:因此用户可以根据他们的需要和想要使用多少存储空间来下载标准 1、标准 2 和/或标准 3 的文件。数据将以 .sqlite 文件的形式提供,当然每个文件都共享相同的数据模型。

现在,会有一些小的数据重叠(在我的情况下无法避免),因此单个元素可能同时在具有标准 1 的集合和具有标准 3 的集合中。然而,最终应用程序将只显示一个元素。

我考虑了两种方法,但我不确定要走哪条路,意见和建议真的很棒:

  1. 静态合并:在下载一个新数据集的情况下,将数据从源复制到应用程序数据库,然后丢弃下载的数据。我不喜欢这种方法,因为 a) 它在加载期间需要双倍的数据集存储空间 b) 它可能非常耗时 c) 由于数据集预计会超时更新,更新可能很难实现并且需要再次下载一个大文件并使用两倍于数据集本身的大小

  2. 动态合并:在沙箱缓存目录中保留多个文件(如 .../Cache/criteria1/ , .../Cache/criteria2/等),这将允许在添加和删除文件夹时简单地下载文件夹的内容丢弃时,只需要创建一个虚拟 SeedData ,这将是几个 .sqlite 文件之间的动态合并(动态合并将丢弃重复项,从而解决重叠问题)。此外,更新将非常容易处理,因为只需通过下载新内容替换文件夹的内容即可。然后,如前面共享的链接中所述,我将拥有一个 UserData 数据库(将用于 r/w)和一个由多个数据文件组成的 SeedData(将严格用于 r-only)。

到目前为止,我已经进行了很多搜索,但我无法以令人满意的方式实现这一目标(或者我不明白)。我严格针对 iOS 7。

如果可以的话,感谢您的帮助:) 克里斯

4

1 回答 1

0

嗯,这比我想象的要容易得多。我实际上做了一些测试并使用

[persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                              configuration:nil
                                        URL:storeURL
                                    options:nil
                                      error:&error];
]

尽可能多的 storeURL 允许您使用单个 NSFetchRequest 一次访问所有表。

当然,在重叠的情况下,需要以消除重复的方式对获取请求进行雕刻(如果这是您想要的)。

于 2013-10-27T09:53:49.763 回答