下面,d
和dictionary
引用相同的域对象,但==
和isEqual:
都会生成NO
。比较没有主键的领域对象的最佳方法是什么?
(lldb) po d
UserDictionary {
dateImported = 2016-02-12 03:44:53 +0000;
dirtyProperties = RLMArray <0x7f01a110> (
);
var1 = ingles;
var2 = ;
var3 = ;
name = bab.la (popup);
url = http://en.bab.la/dictionary/%(var1)s-english/%(term)s;
toLanguage = es;
fromLanguage = en;
}
(lldb) po dictionary
UserDictionary {
dateImported = 2016-02-12 03:44:53 +0000;
dirtyProperties = RLMArray <0x7a1b4d30> (
);
var1 = ingles;
var2 = ;
var3 = ;
name = bab.la (popup);
url = http://en.bab.la/dictionary/%(var1)s-english/%(term)s;
toLanguage = es;
fromLanguage = en;
}
这必须在某个地方完成,因为我能够在RLMResults中使用indexOfObject作为解决方法。
答案 0 :(得分:3)
isEqualToObject:
检查两个对象实例是否引用相同的底层持久对象。
答案 1 :(得分:1)
默认isEqual:
实现只是比较内存地址,如==
那样。
您必须自己实施-isEqualToUserDictionary:(UserDictionary*)
您也可以实现-isEqual:(id)
方法,但您应该这样做
首先在方法中检查对象的类型。
你不应该比较对象的主键,而是比较它的所有字段。
实施-hash
是让对象具有可比性的好方法。