gpt4 book ai didi

ios - 如何切换到MainThread来访问Realm对象

转载 作者:行者123 更新时间:2023-11-30 12:30:06 25 4
gpt4 key购买 nike

下面的代码片段是我获取 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com