2012-01-09 2 views
0

CoreData 엔티티에서 객체 비교가 어떻게 이루어 졌는지 궁금합니다. 대다 관계가있는 두 개의 엔티티가 있다고 가정합니다. 지금은 모든 EntityB이 entityA을 통과 검색 할CoreData에서 객체 생성 및 비교에 대한 이해

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"prop1=%@",x]; 
EntityA *entityA = //execute fetch 

:

EntityA { 
prop1 
entityB <-- to-many relationship 
} 

EntityB { 
.... properties 
entityA <-- one-to-one relationship 
} 

나는의 단 하나의 EntityA 같은 기준을 만족이 가정 해 봅시다 단순 들어, 자 NSPredicate와 특정 prop1와 엔티티를 검색 할 치죠

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"EntityA=%@",entityA]; 
EntityB *entityB = //execute fetch 
EntityA *parentA = entityB.entityA; 
내가 어떤 메소드를 오버라이드 (override)하지 않았다고 생각이 시점에서

하지만 EntityA 및 EntityB 그냥 NSManagedObject을 확장, 재 일 것입니다 무슨 : 기준으로 이 성명서 sult?

if(entityA==parentA) NSLog(@"YES"); 
else NSLog("NO"); 

"예"의 경우 왜 그런 결과가 나타 납니까? 그리고 동일한 사형 집행에서 얼마나 많은 물건을 가지고 있습니까? 예를 들어 내가 알고있는 영속 계층을 사용하면 두 개의 별개의 객체가 생기고 관련 클래스의 equals 메소드를 오버라이드하고 거기에 로직을 구현하는 경우에만 비교가 "예"가됩니다.

이 경우 CoreData가 일종의 캐싱 및 재사용을하고 있는지 궁금합니다.

감사

오브젝티브 C ==에서

답변

0

확인할 것이다 entityB 메모리에서 동일한 객체에 가리키면. 비교를 수행하려면 isEqual: 메소드를 사용해야합니다. isEqual: 메서드를 수행하면 YES가 반환되고 ==은 NO를 반환 할 가능성이 높습니다.