下面的代码片段是我获取 resultEvents
中所有数据的地方,但我遇到了这个问题。
有时,当下面的代码执行时,我的当前线程不在MainThread
上,那么如何将当前线程更改为MainThread?我在 tableView 的 cellforRow
方法上使用 resultEvents
,这就是为什么我需要在 MainThread
上执行此操作。
DispatchQueue.main.async {}
是我需要的吗?
如果是这样,那么我将无法使用它,因为我在访问 DispatchQueue.main.async
内的 resultEvents
时收到此错误:
error: variable 'resultEvents' captured by a closure before being initialized
并且我无法根据this使用一些虚拟或空数据来初始化它和 this .
我的代码如下:
var resultEvents: Results<REvents>
print("realm012: ",realm , Thread.current)
/// MARK: Realm Fetching
if Thread.isMainThread {
resultEvents = realm.objects(REvents.self).sorted(byProperty: "created", ascending: false)
} else {
// Here how can i change my currentThread to Main, so that i can access this realmObject on TableView's CellForRow method.
let bgRealm = try! Realm()
resultEvents = bgRealm.objects(REvents.self).sorted(byProperty: "created", ascending: false)
}
最佳答案
是的,DispatchQueue.main.async
就是您正在寻找的:)
尝试像这样声明您的 resultEvents
变量:
var resultEvents: Results<REvents>!
最初将其设置为nil
。
郑重声明,您可能需要 DispatchQueue.main.sync
,具体取决于您的具体逻辑。例如,如果您需要进一步访问代码下方的 resultEvents
等。
关于ios - 如何切换到MainThread来访问Realm对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43664268/