【发布时间】:2018-01-07 03:33:55
【问题描述】:
我最近开始使用 Realm,我不确定我的用例是否有效:
通常,当从数据库读取大量数据时,我想将其放入后台队列中,以便异步获取数据并稍后在主线程上使用。
例如,我想根据城市获取几个结果:
private var results: [Results<SomeObject>?] = []
autoreleasepool {
DispatchQueue(label: "background").async {
[unowned self] in
do
{
let realm = try Realm()
for i in 1...City.count
{
self.results.append(realm.objects(SomeObject.self).filter("city=\(i)"))
}
}
catch
{
NSLog("Failed to open Realm instance on background qeueue")
}
}
}
稍后使用results 更新我的图表:
cell.setChartData(ChartDataFactory.createCombinedData(from: results[0]))
但是,如果我将此模型应用于 Realm,则会出现类似
的错误由于未捕获的异常“RLMException”而终止应用程序,原因:“从错误线程访问的领域。
我知道我必须为每个线程使用领域,我可以通过在主线程上读取领域来做到这一点,但我不希望领域查询阻塞我的主线程。
有什么方法可以实现我的目标吗?例如在后台队列中读取领域并从另一个线程访问结果,同时保持自动刷新功能。
谢谢。
【问题讨论】:
-
嘿,你能弄清楚这个吗?似乎不可能将全新的领域对象从后台移动到主线程...我只看到从主线程转到后台的示例...