2010-02-09 59 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)方法,以便“相等”意味着“相同的对象”或“具有相同内容的对象”。