CoreData 对多的可选关系永远不能为零?
Posted
技术标签:
【中文标题】CoreData 对多的可选关系永远不能为零?【英文标题】:CoreData optional to-many relationships can never be nil? 【发布时间】:2014-02-20 11:48:37 【问题描述】:我刚刚发现的怪癖,并想与这里的任何人确认这是否可以避免。基本上,如果我有一个非常简单的两个实体模型:
Entity1
和 Entity2
之间存在一对多关系。该关系是可选的,双方都以 nullify 作为删除规则。但是,如果我插入一个新的Entity1
,则children
关系的值将是一个空集,而不是nil
:
NSManagedObject *object = [NSEntityDescription
insertNewObjectForEntityForName:@"Entity1"
inManagedObjectContext:[self managedObjectContext]];
assert([object valueForKey:@"children"] != nil);
此外,我无法将关系显式设置为nil
:
[object setValue:nil forKey:@"children"];
assert([object valueForKey:@"children"] != nil);
我已经在一个新的最小项目中验证了这一点,这似乎是一个真正的实现细节。问题是,我希望能够区分 nil
值(表示当前未知)和空集(真正的归零关系)。 CoreData 是否真的以一种相当直接的方式支持这一点?目前看来不是,这意味着我将不得不找到另一种(不那么直接)的方式来表示我的模型。
谢谢,
J
【问题讨论】:
注意,我也用-primitiveValueForKey:
验证了这一点;结果是一样的
【参考方案1】:
简短的回答是否定的。你总是会得到一个空集。如果您需要知道一个对象结构是否完全实现(我猜您的目标是什么),那么您需要在对象上设置一个属性来说明它是否完全实现。
【讨论】:
感谢您的回复。是的,除了依赖nil
之外,似乎我必须找到另一种方式来表示这一点。以上是关于CoreData 对多的可选关系永远不能为零?的主要内容,如果未能解决你的问题,请参考以下文章
CoreData :NSFetchedResultsController 一对多对多的关系