iPhone:如何处理核心数据关系

时间:2011-03-20 11:15:18

标签: iphone core-data nsxmlparser

我是核心数据和数据库的新手。现在我需要解析XML并将内容存储在Core Data中。 XML看起来像这样:

<books>
<book id="123A" name="My Book">
      <page id="95D" name="Introduction">
          <text id="69F" type="header" value="author text"/>
          <text id="67F" type="footer" value="author text"/>
    </page>
    <page id="76F" name="Chapter 1">
       <text id="118" type="selection">
            <value data="1">value1</value>
            <value data="2">value2</value>
            <value data="3">value3</value>
       </text>
    </page>
</book>
    <book id="124A"...

根据我的理解,我需要四个实体,如“书籍”,“书籍”,“页面”和“文字”。我想知道如何正确设置关系以及如何将Page对象添加到Book对象以及如何检索Text对象属性的值?我发现的教程主要涉及一个实体,所以我没有真正理解这个想法。感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

不,你需要三个实体。您可以将“Books”视为您正在使用的CoreData数据库。然后,CoreData数据库包含许多名为book的实体。

我认为您拥有的数据模型有点奇怪,但我想这对您的应用程序有意义。要将它映射到CoreData,我会:

添加实体书籍,页面,文字

分别向他们添加 bookId,pageId,textId

然后将页面图书之间的关系添加到文字页面

到那时你应该能够通过询问所有

页面来打印整本书

预订 =您感兴趣的书

然后按 pageId

排序所有这些页面

按顺序,要求所有的文本 页面 =当前页面

然后按 textId 对这些文本进行排序。

可能存在的问题是文本可以有多个值,如上面的XML所示。你可以通过添加另一个名为Value的实体来使用它,但我可能会通过直接将属性“value”和“type”添加到 Text 实体来解决它。 (然后,您可以在打印页面时使用“value”作为第二个排序键。

答案 1 :(得分:0)

查看以下链接: http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CoreData/ http://developer.apple.com/cocoa/coredatatutorial/index.html(对于普通的Cocoa,但同样的原则也适用,所以这应该有帮助)