【问题标题】:Compare realm objects比较领域对象
【发布时间】:2016-02-12 09:22:53
【问题描述】:

在下面,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 作为解决方法。

【问题讨论】:

    标签: objective-c realm


    【解决方案1】:

    isEqualToObject: 检查两个对象实例是否引用同一个底层持久化对象。

    【讨论】:

      【解决方案2】:

      默认的isEqual: 实现只是比较内存地址,就像== 一样。

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

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

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

      【讨论】: