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

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

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

相关文章:

ios - iBeacon Bluetooth didEnterRegion 和 didExitRegion 方法永远不会触发

ios - 如何为 Xcode 6 创建自定义 Swift 文件模板?

ios - 将日期字符串表示为 UTC 日期并将其转换为本地时区

swift - 将具有通用参数的函数分配给变量

ios - objective-c 语法和 C 语法的不同结果

ios - 以编程方式自动布局不起作用

swift - 在swift中有条件地为变量赋值的最佳方法

java - Realm 数据库如何工作?

swift - 如何快速将 SQLite 数据库转换为 Realm 数据库

android - 在使用 Realm 时是否有必要使用 RealmObject 扩展每个模型类?