swift - 有没有办法以特定大小的批处理(比如 50)获取存储在 Realm 中的大量数据?

标签 swift realm large-data

我正在尝试将存储在 Realm 中的简单数据快速加载到 uitableview 中。但我不希望 realm 一次加载所有内容,而是希望它在每次用户到达表底部时逐 block 加载。

我已经浏览了所有基本文档以及关于 stackoverflow 和 github 的几个问题和讨论,但似乎没有任何帮助。

这是我的对象-

class Numbers:Object {
    @objc dynamic var numb = ""
    @objc dynamic var name = ""
    override class func primaryKey() -> String? {
        return "numb"
    }
}

这是最基本的代码——

override func viewDidLoad() {
    super.viewDidLoad()

    let realm = try! Realm()
    try! realm.write {
        let info = realm.objects(Numbers.self)
    }
}

现在是下面一行-

    let info = realm.objects(Numbers.self)

它将一次加载存储在 Realm 表中的所有数据,但我只想一次加载其中的一部分。

最佳答案

不清楚您为什么要这样做,但可能是因为您担心从内存角度来看获取所有 Number 对象的成本太高。如果这是您的顾虑,那就不必了。 Realm 延迟加载它的所有对象。这意味着当您使用 let info = realm.objects(Numbers.self) 从 Realm “获取”所有 Number 对象时,这些对象在被使用之前都不会被实际访问。例如:如果 Number 对象显示在 tableview 中,第一次实际读取对象是在 tableview 单元格中绘制时,因为 tableview 只绘制单元格的子集(那些需要出于滚动目的立即可见)这意味着只会读取这些 Number 对象的一个​​子集。

如果您确实需要访问较小的数字对象集,您可以执行以下操作。这取自 Swift realm docs (部分:限制结果)。

let info = try! Realm().objects(Numbers.self)
for i in 0..<5 {
    let number = info[i]
    // ...use number as you need to.
}

关于swift - 有没有办法以特定大小的批处理(比如 50)获取存储在 Realm 中的大量数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57002080/

相关文章:

swift - 如何使用mapbox : swift 用虚线绘制折线(MGLPolyline)

ios - Catalyst textview 插入符号颜色

swift - [元素]' requires that '元素'继承自 'Object'

python - 高效存储和读取大数据文件

arrays - 如何在 Swift 中截断字符串数组?

ios - AWS 认知错误 : Authentication delegate not set

realm - SwiftUI 导航自动关闭/弹出 - Realm

java - "Object"不是这个 Realm 的架构的一部分

csv - 根据列值拆分大型csv文本文件

r - 如何识别 'to' 和 'from' 位置未涵盖的所有序列号?