(Xcode 6 + iOS 8 iPad Air Simulator)
我正在一对多关系的“多”实体中创建一个新的托管对象。但它会导致“一个”实体上的多对多关系错误。这是核心数据的正常行为吗?
我有这样的架构:
Entity: Parent Child
Relationship: children<------->> parent
父母可以有很多孩子 一个孩子只能有一个父母
我以这种方式创建了一个孩子:
- (void)createChildForParent:(Parent *)parent
{
Child *newChild = <instantiate new Child managed object>
newChild.parent = parent; <- fault fires here. Log says: CoreData: annotation: to-many relationship fault "children" for objectID <the Parent> ... fulfilled from database. Got 10000 rows
}
在我的实际应用程序中,我的任务是为许多父母创造了许多孩子。每次我创建一个孩子时,父母的多对多故障都会触发。每次有一个伴随的SQL返回数千行 - yikes! Instrument的Core Data Cache Misses充斥着RCM条目。我不希望父亲的关系错误发生,因为我只插入一个Child。
我做错了什么?
更新
如果我没有将其设置为孩子的一对一关系的反向关系,则父上的关系错误不会触发。
This SO post是一个很好的信息来源。这似乎是标准的核心数据行为。
我可以理解CD需要有关子集的信息,以便在模型中强制执行Optional和Minimum / Maximum Count属性。但我不明白为什么它必须在整个集合中出错,即使我将父对象与子节点的关系设置为可选,并且没有最小/最大计数界限(默认值)。听起来太极端(和懒惰)。