我试图将存储在领域中的简单数据快速加载到uitableview中。但是我不希望realm一次加载所有内容,而是希望每次用户到达表的底部时都逐块加载。
我已经阅读了所有基本文档以及关于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)
它将立即加载存储在领域表中的所有数据,但是我想一次仅加载其中一些。
答案 0 :(得分:2)
目前尚不清楚为什么要执行此操作,但这可能是因为您担心从内存的角度来看,获取所有Number对象的成本太高了。如果这是您的关注,则不必如此。 Realm延迟加载其所有对象。这意味着当您使用let info = realm.objects(Numbers.self)
从领域“获取”所有Number对象时,直到使用这些对象之前,这些对象都不会被实际访问。例如:如果Number对象显示在表格视图中,则第一次实际读取该对象是在表格视图单元格中绘制该对象时,由于表格视图仅绘制一个单元格子集(需要立即可见(用于滚动目的),这意味着将仅读取这些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.
}