开发者

iPhone: How to handle Core Data relationships

开发者 https://www.devze.com 2023-02-18 09:25 出处:网络
I\'m new to Core Data and databases in general. Now I need to parse a XML and store the contents in Core Data. The XML looks something like this:

I'm new to Core Data and databases in general. Now I need to parse a XML and store the contents in Core Data. The XML looks something like this:

<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"...

From my understanding I would need four Entities, like "Books", "Book", "Pages" and "Text". I wonder how to set the relationships correctly and how to add for example a Page object to a Book object and how to retrieve a Text object attribute's value? The tutorials I have found mostly deal with one Entity so I didn't really g开发者_如何学Pythonet the idea.. Gtrateful for any help!


No, you'd need three entities. You can think of "Books" as the CoreData database you're using. The CoreData database then includes a number of entities called book.

I think the data model you have is a bit weird, but I guess it makes sense for your application. To map it to CoreData I would:

Add the entities Book, Page, Text

Add a bookId, pageId, textId to them, respectively.

Then add a relation from Page to Book, and from Text to Page.

By then you should be able to print out a whole book by asking for all Pages that have

Book = the book you're interested in

and then order all those Pages by their pageId

and in order, ask for all texts that have Page = the current page

then order those Texts by their textId.

What might be a problem is that a Text can have multiple Values, as seen in your XML above. You could use this by adding another entity called Value, but I would probably solve it by adding the attributes "value" and "type" to the Text entity directly. (You could then use "value" as a second sort key when printing out a page.


Check out these links: http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CoreData/ http://developer.apple.com/cocoa/coredatatutorial/index.html (for regular Cocoa, but the same principles hold so this should help)

0

精彩评论

暂无评论...
验证码 换一张
取 消