创建复杂Core Data数据库的提示

时间:2012-05-25 15:23:28

标签: ios core-data one-to-many

我是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?

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

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

2 个答案:

答案 0 :(得分:1)

只使用一个MOC,传递它并用它做任何事情,一个保存在任何地方同时影响一切。

另外,您可能想看看为什么在这里使用Core Data,Core Data对于实际对象很方便,但如果它只是您要存储的数据,那么Core Data有一个很多的限制如果您将其视为SQL数据库,那么您可能不会期望。

-

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

答案 1 :(得分:0)

核心数据是一个非常强大的框架,包含所有缓存,数据完整性验证机制和优化服务。如果你从头开始编写我们自己的模型,你必须自己实现的东西。

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

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

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