我正在尝试建立一个简单的Core Data模型,如下所示:

Order(code, customer)
Book(code, title, price)
OrderBook(order_code, book_code, quantity)

从Core Data文档中,我发现无法对添加到其属性的多对多关系进行建模。因此,我将其建模如下。

在哪里:
  • (从OrderOrderBook)与删除规则存在一对多关系级联
  • OrderBookOrder的形式与删除规则存在一对一关系无操作

  • 这对于BookOrderBook也是有效的。

    第一个问题:这个模型有效吗?

    假设模型还可以,我创建了相应的NSManagedObject子类。
    Book.h/.m
    Order.h/.m
    OrderBook.h/.m
    

    也就是说,我有必要通过Core Data机制填充相应的db。为此,我创建了相应的类别,如下所示,其中每个类别都负责创建自身(以维护对象封装)。
    Book+Creation.h/.m
    Order+Creation.h/.m
    OrderBook+Creation.h/.m
    

    例如,Book+Creation类别具有如下的类方法:
    + (Book *)bookWithXMLElement:(GDataXMLElement *)xmlElement inManagedObjectContext:(NSManagedObjectContext *)context;
    

    现在我有一个问题,我不知道如何解决。

    模型填充必须在不同的时间发生。首先填充书籍表(我正在根据xml文件创建书籍目录)。完成后,我就可以填充订单和订单表。为了填充这些表,我使用了如下所示的xml文件:
    <orders>
      <order>
         <code>1234</code>
         <book>2567</book>
         <customer>299</customer>
         <quantity>4</quantity>
      </order>
    </orders>
    

    要创建Order受管对象,我在其Order+Creation类别中创建了以下方法:
    + (Order *)orderWithXMLElement:(GDataXMLElement *)xmlElement inManagedObjectContext:(NSManagedObjectContext *)context;
    

    创建对象后,该对象将传递到OrderBook+Creation类方法类别以创建OrderBook受管对象:
    + (OrderBook *)orderWithXMLElement:(GDataXMLElement *)xmlElement withOrder:(Order*)order inManagedObjectContext:(NSManagedObjectContext *)context
    {
      OrderBook* orderBook = [NSEntityDescription insertNewObjectForEntityForName:@"OrderBook" inManagedObjectContext:context];
      orderBook.order = order;
      //orderBook.book = <-- how can I retrieve the book?
    
      return orderBook;
    }
    

    缺少的是如何创建(或检索)Book对象以将其分配给OrderBook对象。

    第二个问题:如何检索Book对象并将其分配给OrderBook?我是否需要创建NSFetchRequest来获取正确的对象Book(在xml文件中具有相同代码的对象,例如<book>2567</book>)?如果是这样,是否有一种机制可以提高获取请求的性能?

    请记住,书表已经被填充。

    希望是清楚的。先感谢您。

    最佳答案

  • 对于一对一关系,应“无效”而不是“无 Action ”。
  • 是的,是的,您需要获取请求。

  • 如果您在获取请求时遇到性能问题(很难说,不知道所涉及的数字),则可以将整本书籍都获取到内存中(同样,根据数字,可能不切实际),然后使用数组过滤/枚举来查找具体项目,但您绝对应该首先构建并分析最简单的选项。
    删除规则类型描述为here,对于从orderBook到Book和Order的一对一关系,nullify是正确的:

    这意味着,如果您删除一个OrderBook,则将从Order和Book实体中的orderBooks和bookOrders集合中将其删除。

    关于ios - 使用属性建模和填充核心数据多对多关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9310109/

    10-12 01:53