是否可以在约束中包含Core Data实体类型?

时间:2018-11-10 01:20:06

标签: swift xcode core-data

我正在使用Core Data + Swift 4.2 + Xcode10。在我的数据模型中,我有一个没有父实体的抽象实体A,以A为父的实体B和以A为母的C。父母。

实体A具有一个时间戳字段,因此它由B和C继承。我想施加一个约束,即时间戳在实体类型内必须唯一。也就是说,我希望所有B项目都具有唯一的时间戳,而所有C项目都具有唯一的时间戳,但是某些B项目可能与某些C项目具有相同的时间戳。

是否有一种方法可以在Xcode中表达该约束?实体编辑器中的“约束”字段需要属性列表。时间戳记是一个属性,因此可以,但是实体类型(B或C)则不是。所以我看不到一种包含实体类型的方法。

实体类型是否可能是隐式属性?这里只是黑暗中的一枪。

编辑:明确地说,我要问的原因是我试图保存带有时间戳T1的B实例和带有时间戳T1的C实例,并且我得到一个错误,即约束是违反了。我希望两个实例都可以保存(也许这对我而言是一厢情愿的想法)。如果这有所作为,我正在使用Sqlite后端。

2 个答案:

答案 0 :(得分:3)

我认为您无法在Core Data中自动指定此行为。但是,您可以通过向实体A添加另一个属性,然后对该属性和时间戳的组合进行约束来实现此目的。

在此示例中,我向实体A添加了subtype,并指定了约束subtype,timestamp

enter image description here

这些是实体类:

class EntityA: NSManagedObject {
    @NSManaged var timestamp: String
    @NSManaged var subtype: String
}
class EntityB: EntityA { }
class EntityC: EntityA { }

保存实体之前,您需要正确设置subtype

entity.subtype = "B"

entity.subtype = "C"

或更笼统地说:

entity.subtype = entity.entity.name!

它不漂亮,但是可以用。

答案 1 :(得分:0)

我只是想做类似的事情。我最终可以使用该属性执行switch语句,然后使用victim->bk = head

case is Entity: