【问题标题】:Convert RLMResults to RLMArray将 RLMResults 转换为 RLMArray
【发布时间】:2014-11-25 14:41:26
【问题描述】:

我正在使用 objectsWhere 查询一个 RLMArray,我得到一个 RLMResults,但我需要一个 RLMArray,其结果是我的代码中的这一点。

private var data: RLMArray?

self.data = self.currentSubcategory!.datasheets // is a RLMArray
self.data = self.data!.objectsWhere("is_favourite = 1")

【问题讨论】:

    标签: ios swift realm


    【解决方案1】:

    RLMArray 已分为两类:RLMArrayRLMResultsRLMArray 现在仅用于多属性 RLMObject 类,而 RLMResults 用于所有 查询和排序方法。这样做是为了反映两者 实际上有相当不同的 API(例如,RLMResults 没有 有addObject:),并且随着我们添加,它们预计会进一步分化 更改查询通知。

    为此的迁移应该像替换 RLMArray 一样简单 在编译器抱怨的所有地方都有RLMResults 关于。

    为此,arraySortedByProperty:ascending: 已重命名 到sortedResultsUsingProperty:ascending:addObjectsFromArray: 已重命名为addObjects:,以反映您可以 将任何可枚举对象传递给它(例如NSArrayRLMArrayRLMResults)。

    来源:http://realm.io/news/realm-cocoa-0.87.0/#rlmresults

    希望够了

    【讨论】:

    【解决方案2】:

    您需要将对象从RLMResult 添加到RLMArray...

    @implementation RLMResults (RLMArrayConversion)
    
    - (RLMArray *)toArray {
        RLMArray * array = [[RLMArray alloc] initWithObjectClassName:self.objectClassName];
        [array addObjects:self];
        return array;
    }
    
    @end
    

    【讨论】:

      【解决方案3】:
      let datasheets = self.currentSubcategory!.datasheets!.objectsWhere("is_favourite = 1")
      let objects = Array(datasheets.generate())
      
      self.data!.removeAllObjects()
      self.data!.addObjects(objects)
      

      需要创建结果数组,因为self.data!.removeAllObjects() 行也会清除datasheets,因为RLMResults 在您更改源时会实时更新。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多