我需要从Realm Results中获取20个以下的对象。数据库可能很沉重,因此Results.count是长时间调用。
所以,我需要的是从结果中逐个获取对象,直到得到20或最后一个对象。
但是,当我尝试在最后一个对象之后获取索引时,它引发了Realm异常“索引x超出范围(必须小于x)”。
所以,这个不起作用:
style="margin-bottom: -9px; backgroundImage:new 0 0 1920 140;"
如果我尝试使用let searchResult = Ticket().get(filter: "base == nil && deleted == 0 AND orderPaidAt > 0 AND (\(query))").sorted(byKeyPath: "orderPaidAt")
for i in 0..<20 {
if let ticket = searchResult[i] as? Ticket {
...
} else {
break
}
}
或searchResult.count
,则会增加很多时间,尤其是在旧设备上。这就是为什么我要避免它。
答案 0 :(得分:0)
您可以使用prefix(maxLenght:Int)方法获取具有指定maxLenght的子集合。 示例:
realm.objects(ObjectModel.self).prefix(20).count
答案 1 :(得分:0)
结果是延迟加载的,因此您可以一个一个地循环遍历结果,直到结束,或者直到达到自定义计数:
let searchResult = Ticket().get(filter: "base == nil && deleted == 0 AND orderPaidAt > 0 AND (\(query))").sorted(byKeyPath: "orderPaidAt")
var count = 0
for thisTicket in searchResult {
// do something
count += 1
if count > 20 { break }
}
通过这种方式,您只加载所需的值,而不会调用count
或超出范围访问结果。