非可选的to-many关系允许nil或空集

时间:2016-07-15 18:59:48

标签: core-data

我有一个示例数据结构: 表"组"和表"项目"。组可以包含零个或多个项目,项目必须链接到最少一个或多个组:

Groups   |--------- to-many, optional ---------->>|Items
---------|<<------- to-many, non-optional! -------|--------
groupName|                                        |itemName
items    |                                        |groups

我创建了NSManagedObject子类。两者都是微不足道的,但这里是项目:

class Items:NSManagedObject {
    @NSManaged var itemName:String
    @NSManaged var groups:Set<Groups> //attention: there is no ! or ?
}

在下面的代码中,我希望能够发现错误:

var item = Items()
item.itemName = "AAAA"
do {
    try Items.moc.save() //moc - static field in Items "linked" to ManagedObjectContext
}
catch {
    print(error)
}

但没有错误!项目使用空组保存到CoreData。我无法弄清楚为什么? 但是,如果我将Items to Groups关系设为非可选的to-one(在类Items groups字段中成为@NSManaged var group:Groups)异常抛出我的预期。

我知道,我可以在Items类函数validateGroups中实现,在那里我可以检查组是否为空,但我想知道:我是否找不到我的错误,或者是Core Data bug(或功能) ?更多,我喜欢将存储逻辑实现到数据库中(在sql中我非常喜欢触发器,我不能没有外键,约束等)。

所以,请帮助我理解这一点。谢谢!

1 个答案:

答案 0 :(得分:0)

问题解决了,感谢Willeke! 当我在Item的实体关系属性中设置最小计数时,问题就消失了。

enter image description here