N. *_*ham 10 iphone cocoa-touch core-data objective-c
是否有一种简单/通用的方法来比较两个对象,看它们是否相同?"相同"是指相同的实体名称,所有属性和关系都相同,但内部对象ID不同.
同样,是否有一种简单/通用的方法来找到差异?
Bar*_*ark 10
您是否需要以递归方式包含关系相等(即关系指向与您的定义相同的目标)?您是否需要跨托管对象模型测试相等性?您需要测试未提交的值吗?假设答案对所有这些都是"不",解决方案并不太难......
instance1在以下情况下等于instance2您的定义:
NSArray *allAttributeKeys = [[[instance1 entity] attributesByName] allKeys];
if([[instance1 entity] isEqual:[instance2 entity]]
&& [[instance1 committedValuesForKeys:allAttributeKeys] isEqual:[instance2 committedValuesForKeys:allAttributeKeys]]) {
// instance1 "==" instance2
}
Run Code Online (Sandbox Code Playgroud)
如果上述任何问题的答案都是"是",则解决方案要复杂得多.
警告
我不确定这是不是一个好主意.如果您需要使用上述解决方案,您可能想重新考虑您的设计.几乎可以肯定有更好的方法来做你正在尝试做的事情,不要冒着与Core Data的意图相冲突的风险.
您可能想要阅读本文:
http://moottoot.blogspot.com/2008/02/core-data-and-uniqueness.html
NSManagedObject有一个isEqual:不允许覆盖的方法.您是否尝试过使用此方法检查是否返回不同类型的对象?各种类重写this(NSObject)方法,因此"equal"表示"相同的对象"或"具有相同内容的对象".
| 归档时间: |
|
| 查看次数: |
6222 次 |
| 最近记录: |