【问题标题】:How to make RLMResults mutable?如何使 RLMResults 可变?
【发布时间】:2015-03-04 05:39:26
【问题描述】:

Realm 文档说RLMResults 是舔NSArray。我从数据库返回了一些结果,我想将其合并到另一个 RLMResults 中。但它似乎是不可变的,如何使RLMResults 添加来自另一个RLMResults 的对象?或使其可变?或将其转换为NSArray

【问题讨论】:

  • 试图回答你的问题,真的开始讨厌这种 API 设计了哈哈。为什么需要合并 RLMResults?
  • @MillieSmith 我需要将 RLMResults 与 RLMResults 结合起来。
  • 你能分享更多关于你正在尝试做的事情吗?一个小的代码示例会很好。这可能是我们可以根据用例考虑的事情

标签: ios iphone realm


【解决方案1】:

目前这是您必须手动执行的操作。您可以通过连接两个结果来创建一个 RLMArray。

不过,我们正在进一步讨论相同类型 RLMObject 路线图的联合/合并方法。

您可以分享的任何内容都将帮助我们了解用例并可能影响 api 设计

只要是同一类型,这里是一个通用的例子

let currentTask = Task.objectsWhere("name = %@", "First task").firstObject() as Task
let currentRecords = currentTask.records
let arrayOfRecords = RLMArray(objectClassName: "Record")

arrayOfRecords.addObjects(currentRecords)

let futureTask = Task.objectsWhere("name = %@", "Future task").firstObject() as Task
let futureRecords = futureTask.records

arrayOfRecords.addObjects(futureRecords)

【讨论】:

  • 您能提供将 RLMResults 对象转换为 RLMArray 对象的代码吗?我不知道该怎么做,这基本上就是OP问题的答案。对我来说,RLMArray 无法实例化似乎也很奇怪,因为您可以任意将对象添加到实例中。此外,这有点超出了问题的范围,但是在 RLMResults 中,拥有 firstObject 和 lastObject 有什么用?我找不到从中获取其他物品的方法。这些可能是幼稚的问题 - 我是图书馆的新手。
  • 没问题,我已经编辑了我的示例以包含此内容。它可以用一个类型来实例化。你是如何尝试实例化它的?不确定最后一个问题是什么,但我使用 firstObject 的方式很像您在上面的示例中看到的,因为 Task.objectsWhere... 将返回一个 RLMResults,而我只是在寻找一个任务。当您想知道根据搜索条件添加的最后一个任务时,可能会使用 lastObject
【解决方案2】:

我从duemunk找到了解决方案:https://github.com/realm/realm-cocoa/issues/1046

基本上我将 RLMResults 转换为 [RLMObject]: func toArray<T>(ofType: T.Type) -> [T] { var array = [T]() for result in self { if let result = result as? T { array.append(result) } } return array }

let tracks = Track.allObjects().toArray(Track.self) // tracks is of type [Track]

【讨论】:

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