我正在尝试建立一个简单的Core Data模型,如下所示:
Order(code, customer)
Book(code, title, price)
OrderBook(order_code, book_code, quantity)
从Core Data文档中,我发现无法对添加到其属性的多对多关系进行建模。因此,我将其建模如下。
在哪里:
Order
到OrderBook
)与删除规则存在一对多关系级联 OrderBook
到Order
的形式与删除规则存在一对一关系无操作 这对于
Book
和OrderBook
也是有效的。第一个问题:这个模型有效吗?
假设模型还可以,我创建了相应的
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>
)?如果是这样,是否有一种机制可以提高获取请求的性能?请记住,书表已经被填充。
希望是清楚的。先感谢您。
最佳答案
如果您在获取请求时遇到性能问题(很难说,不知道所涉及的数字),则可以将整本书籍都获取到内存中(同样,根据数字,可能不切实际),然后使用数组过滤/枚举来查找具体项目,但您绝对应该首先构建并分析最简单的选项。
删除规则类型描述为here,对于从orderBook到Book和Order的一对一关系,nullify是正确的:
这意味着,如果您删除一个OrderBook,则将从Order和Book实体中的orderBooks和bookOrders集合中将其删除。
关于ios - 使用属性建模和填充核心数据多对多关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9310109/