我想知道如何对CoreData实体进行对象比较。 假设我有两个实体,具有多对多的关系。
EntityA {
prop1
entityB <-- to-many relationship
}
EntityB {
.... properties
entityA <-- one-to-one relationship
}
假设我想要使用NSPredicate检索具有某个prop1的实体,为简单起见,假设只有一个EntityA满足此类条件:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"prop1=%@",x];
EntityA *entityA = //execute fetch
现在我想检索所有通过entityA的EntityB作为标准:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"EntityA=%@",entityA];
EntityB *entityB = //execute fetch
EntityA *parentA = entityB.entityA;
此时考虑到我没有覆盖任何方法,但EntityA和EntityB只是扩展NSManagedObject,这个语句的结果是什么?
if(entityA==parentA) NSLog(@"YES");
else NSLog("NO");
如果是“是”,为何会有这样的结果?我在同一个执行中有多少个对象?例如,使用Java中我知道的任何持久层将导致两个不同的对象,只有当我覆盖相关类的equals方法并在其中实现某些逻辑时,比较才是“YES”,例如:
if(objA.getRegistrationNumber()==objA.getRegistrationNumber()) return true;
在这种情况下,我想知道CoreData是否正在进行某种对象缓存和重用。
感谢
答案 0 :(得分:1)
使用objectID识别托管对象:如果你的两个&#34;对象&#34;实际上代表相同的托管对象,它们的objectID将是相同的。您可以通过以下方式确定:
[[objectA objectID] isEqual:[objectB objectID]]
答案 1 :(得分:0)
在Objective-C中==
将检查entityB和A是否指向内存中的同一对象。您可能希望使用isEqual:
方法进行比较。
我认为,如果您使用isEqual:
方法,则会返回YES,如果您执行了==
,则很可能会返回NO。