2016-02-12 165 views
0

以下ddictionary指的是同一个领域对象,但==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作为解决方法。

回答

3

isEqualToObject:检查两个对象实例是否引用相同的基础持久对象。

1

默认isEqual:执行简单地比较内存地址,因为==

您必须自己实施-isEqualToUserDictionary:(UserDictionary*)
您也可以实施-isEqual:(id)方法,但您应该在方法中首先检查对象的类型。

您不应该比较对象的主键,而应该比较其所有字段。

实现-hash是让您的对象具有可比性的好方法。