2010-02-09 70 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 
} 

如果回答上述任何的問題是「是」,解決方案明顯更復雜。

買者

我不知道任何這是一個好主意。如果您需要使用上述解決方案,您可能需要重新考慮您的設計。幾乎可以肯定有更好的方法可以做你想做的事情,而不會冒着與Core Data意圖相違背的風險。

+0

雖然這是一個可靠的解決方案,但我最強烈地同意你的警告。如果您不得不將一個對象中的每個值與另一個對象進行比較,看看您是否複製數據,那麼設計中會出現錯誤,您需要重新考慮它。 –

5

你可能想通過這篇文章來閱讀:

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

NSManagedObject有哪些你不能覆蓋的方法isEqual:。你有沒有嘗試過使用這種方法來檢查它是否返回不同類型的對象?各種類覆蓋此(NSObject)方法,以便「相等」意味着「相同的對象」或「具有相同內容的對象」。