2010-02-09 9 views
10

두 개체를 비교하여 두 개체가 같은지 비교하는 쉬운 방법이 있습니까? '동일한'이란 동일한 엔티티 이름을 의미하며 모든 속성 및 관계는 동일하지만 내부 객체 ID가 다릅니다.핵심 데이터 개체 비교

마찬가지로, 차이점을 찾는 쉬운/일반적인 방법이 있습니까?

답변

10

관계의 동등성을 반복적으로 포함해야합니까 (예 : 관계가 정의와 동일한 대상을 가리킴)? 관리 객체 모델간에 동등성을 테스트해야합니까? 커밋되지 않은 값을 테스트해야합니까? 답을 가정하면 "아니오"이 모든 것입니다,이 솔루션은

instance1

이 정의에 의해 instance2 같다 ... 너무 열심히하지 않은 경우 :

NSArray *allAttributeKeys = [[[instance1 entity] attributesByName] allKeys]; 

if([[instance1 entity] isEqual:[instance2 entity]] 
&& [[instance1 committedValuesForKeys:allAttributeKeys] isEqual:[instance2 committedValuesForKeys:allAttributeKeys]]) { 
    // instance1 "==" instance2 
} 

위의 경우 중 하나에 대한 대답 질문이 "예"이면 솔루션이 훨씬 더 복잡합니다.

주의 할

나는이의 좋은 생각이다 모르겠어요. 위의 솔루션을 사용해야하는 경우 디자인을 다시 생각해 보는 것이 좋습니다. 핵심 데이터의 의도와 충돌하는 위험을 감수하지 않으려 고 노력하고있는 일을 거의 확실하게 수행 할 수있는 좋은 방법이 있습니다.

+0

이것은 단단한 해결책이지만 난 당신의 경고문에 가장 동의합니다. 한 객체의 모든 값을 다른 객체와 비교하여 데이터를 복제하는지 확인해야하는 경우 디자인에 문제가있어 다시 생각해야합니다. –

5

이 문서를 읽어보십시오 :

http://moottoot.blogspot.com/2008/02/core-data-and-uniqueness.html

NSManagedObject는 오버라이드 (override) 할 수 없습니다 방법 isEqual: 있습니다. 이 메서드를 사용하여 다른 종류의 객체에 대해 반환하는지 확인하려고 했습니까? 다양한 클래스가이 (NSObject) 메소드를 오버라이드하므로 "동일 함"은 "같은 객체"또는 "같은 내용의 객체"를 의미합니다.

관련 문제