有没有办法以特定大小的批次(比如 50)获取存储在领域中的大量数据?

Is there any way to fetch huge amount of data stored in realm in batches of specific size, say 50?

我正在尝试将领域中存储的简单数据加载到 uitableswift 中的视图中。但我不希望 realm 一次加载所有内容,而是希望它在每次用户到达 table 底部时逐块加载。

我已经阅读了所有基本文档以及关于 Whosebug 和 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)

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

不清楚您为什么要这样做,但这可能是因为您担心从内存角度来看获取所有 Number 对象的成本太高。如果这是您的顾虑,那就不必了。 Realm 延迟加载它的所有对象。这意味着当您 'fetch' 使用 let info = realm.objects(Numbers.self) none 领域中的所有 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.
}