【发布时间】:2012-01-09 09:57:12
【问题描述】:
我想知道如何对 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 方法并在其中实现一些逻辑时,比较才是“是”,例如:
if(objA.getRegistrationNumber()==objA.getRegistrationNumber()) return true;
在这种情况下,我想知道 CoreData 是否正在做某种对象缓存和重用。
谢谢
【问题讨论】:
标签: objective-c core-data