下面的代码片段是我在resultEvents
中获取所有数据的地方,这里出现了这个问题。
有时,当下面的代码被执行时,我当前的线程不在MainThread
上,那么如何将当前线程更改为MainThread?我在tableView的resultEvents
方法上使用cellforRow
,这就是为什么我需要在MainThread
上执行此操作的原因。DispatchQueue.main.async {}
是我这里需要的吗?
如果是这样,那么我将无法使用它,因为在访问resultEvents
中的DispatchQueue.main.async
时遇到此错误:
错误:变量“ resultEvents”在初始化之前被闭包捕获
而且我无法根据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/