下面的代码片段是我在resultEvents中获取所有数据的地方,这里出现了这个问题。

有时,当下面的代码被执行时,我当前的线程不在MainThread上,那么如何将当前线程更改为MainThread?我在tableView的resultEvents方法上使用cellforRow,这就是为什么我需要在MainThread上执行此操作的原因。

DispatchQueue.main.async {}是我这里需要的吗?

如果是这样,那么我将无法使用它,因为在访问resultEvents中的DispatchQueue.main.async时遇到此错误:


  错误:变量“ resultEvents”在初始化之前被闭包捕获


而且我无法根据thisthis使用一些虚拟或空数据对其进行初始化。

我的代码如下:

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/

10-11 06:41