如何定义实体身份
How to define entity identity
有没有办法定义一个实体的哪些属性应该定义它的对象'NSManagedObjectID
?
我希望能够直接使用 -[NSManagedObjects isEqual:]
和 NSSet
功能,而不是必须构建额外的字典和循环来比较它们 属性 值这也将允许。
换句话说:如果一个实体有一个属性在逻辑上是它的主键,如何告诉 CoreData 使用它来进行对象相等性测试?
你不会。无论如何,子类化都无济于事。
Core Data 不关心您是否创建重复记录。就它而言,如果两个托管对象在持久存储中表示相同的底层实例,则它们是相等的。它在托管对象之间没有其他"equal"的概念。
子类化没有帮助,因为 NSManagedObject
的文档解释说:
NSManagedObject
itself customizes many features of NSObject
so that managed objects can be properly integrated into the Core Data infrastructure. Core Data relies on NSManagedObject
’s implementation of the following methods, which you therefore absolutely must not override: [...] isEqual:
,
您可以创建自己的方法来以任何您喜欢的方式比较托管对象,但是任何依赖于 isEqual:
的行为都将获得 Core Data 的标准行为。
有没有办法定义一个实体的哪些属性应该定义它的对象'NSManagedObjectID
?
我希望能够直接使用 -[NSManagedObjects isEqual:]
和 NSSet
功能,而不是必须构建额外的字典和循环来比较它们 属性 值这也将允许。
换句话说:如果一个实体有一个属性在逻辑上是它的主键,如何告诉 CoreData 使用它来进行对象相等性测试?
你不会。无论如何,子类化都无济于事。
Core Data 不关心您是否创建重复记录。就它而言,如果两个托管对象在持久存储中表示相同的底层实例,则它们是相等的。它在托管对象之间没有其他"equal"的概念。
子类化没有帮助,因为 NSManagedObject
的文档解释说:
NSManagedObject
itself customizes many features ofNSObject
so that managed objects can be properly integrated into the Core Data infrastructure. Core Data relies onNSManagedObject
’s implementation of the following methods, which you therefore absolutely must not override: [...]isEqual:
,
您可以创建自己的方法来以任何您喜欢的方式比较托管对象,但是任何依赖于 isEqual:
的行为都将获得 Core Data 的标准行为。