我正在使用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后端。
答案 0 :(得分:3)
我认为您无法在Core Data中自动指定此行为。但是,您可以通过向实体A添加另一个属性,然后对该属性和时间戳的组合进行约束来实现此目的。
在此示例中,我向实体A添加了subtype
,并指定了约束subtype,timestamp
。
这些是实体类:
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: