0

我是 iOS 编程的新手,我有一个项目正在进行中,伴随着它我不断学习 iOS 的新功能,所以它来到了 Core Data。我已经阅读了它的基本教程和解释。但遗憾的是,他们没有很好地涵盖创建复杂的数据库。我的目标是创建一个从服务器下载大约 20mb XML 文件的数据文件的应用程序。并将其中的数据加载到 App 的 Core Data 数据库中,供用户交互。

我将尝试解释我尝试构建的架构

每个文件都作为类型 A 的实体加载到数据库中。每个实体 A 有几个属性和一个实体 B 数组。(一对多关系)每个实体 B 有几个属性和一个实体 C 数组。(一对多关系)

我的 XML 结构就像

<a>
 <set of b's>
  <b1>
   <set of c's>
    <c1>
    <c2>
    ...
    <cn>
   </set of c's>
  </b1>
  <b2>
  ....
  <bn>
 </set of b's>
</a>

由于实体 A 仅代表导入的不同文件,因此它们是在我在服务器上创建可用数据文件列表时创建的。然后我计划下载文件,解析它并将它的数据加载到数据库中。当我运行我的解析器时,首先我得到创建实体 B 所需的所有数据,然后我可以创建一个字典数组来保存实体 C 的数据,或者我可以将实体插入 B 的集合中。

我遇到问题的部分是如何将实体插入 MOC 以及如何保存它。我的意思是我应该对所有类型的实体使用相同的 MOC 并保存对它的更改吗?或者我应该例如将“B”插入A的MOC,然后将“C”插入B的MOC,然后首先保存B的MOC中的更改,然后保存在A的MOC中?

我的解析器以块的形式读取数据,所以我需要一些事件来告诉它,我已经添加了当前块中的所有数据并且它被保存并且它可以开始读取下一个块。

我将不胜感激那里的任何帮助。

4

2 回答 2

1

只使用一个 MOC,传递它并用它做任何事情,一个保存任何地方一次会影响所有事情。

此外,您可能想看看为什么在这里使用 Core Data,Core Data 对于实际对象很方便,但如果它是您想要存储的纯数据,那么 Core Data 有很多限制,如果您正在考虑,您可能不会想到它作为一个 SQL 数据库。

-

关于将数据加载到对象中。您可以按任意顺序创建这些 A、B、C 对象,并随时或稍后设置它们之间的属性和关联,它真的非常灵活,只需将它们视为任何其他objective-c 对象

于 2012-05-25T15:34:52.687 回答
0

Core Data 是一个非常强大的框架,它为您提供了所有缓存、数据完整性验证机制和优化。如果您从头开始编写我们自己的模型,您必须自己实现的东西。

但是,它不是关系数据库,而且肯定不是 SQL。是的,您很可能会使用 SQLite 作为后备存储,但您不能直接编写 SQL 语句。对于大多数事情,无论如何你都不需要。

在数据库中存储大数据文件时,出于性能考虑不建议这样做。Apple 建议我们将 URL 存储到数据库中的文件,并将数据作为文件保存到文档目录。为了进一步鼓励这一点,他们引入了核心数据实体属性的“快捷方式”,以自动将数据存储为外部参考。

使用模式很简单。将 MOC 视为暂存器。当您创建一个时,您会从持久存储(即数据库)中的所有可用数据开始。然后您插入新的、修改现有的和删除数据,并且每当您保存 MOC 时,数据将被传输到持久存储。或者,如果您不想保存更改,您只需将其丢弃。它还支持撤消管理。

于 2012-05-27T15:50:49.903 回答