【问题标题】:How to Switch to MainThread for accessing Realm Object如何切换到 MainThread 以访问 Realm 对象
【发布时间】:2017-04-27 17:23:40
【问题描述】:

下面的 sn-p 是我在我的 resultEvents 中获取所有数据的地方,我遇到了这个问题。

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

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

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

错误:变量“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)
}

【问题讨论】:

    标签: ios swift realm grand-central-dispatch realm-mobile-platform


    【解决方案1】:

    是的,DispatchQueue.main.async 就是您要找的 :)

    尝试像这样声明您的 resultEvents 变量:

    var resultEvents: Results<REvents>!
    

    最初将其设置为 nil


    作为记录,您可能需要DispatchQueue.main.sync,具体取决于您的具体逻辑。例如,如果您需要在代码的下方访问resultEvents,等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-27
      • 2013-09-14
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多