【问题标题】:InMemory Realm Threading in SwiftSwift 中的 InMemory 领域线程
【发布时间】:2016-12-06 18:08:13
【问题描述】:

我正在尝试在内存领域中使用来存储一些对象。我通常在辅助线程中保存对象并在主线程中请求对象。

我还需要对内存领域有一个强引用,以避免数据丢失。

static private var _strongInMemoryRealm: Realm? = {
    return VideoObject._inMemoryRealm
}()

static private var _inMemoryRealm: Realm? {
    get {

        var realm: Realm? = nil

        let config = Realm.Configuration(inMemoryIdentifier: "InMemoryRealm")

        do {
            realm = try Realm(configuration: config)
        } catch let error {
            debugPrint("Realm could not be opened: ", error)
            Crashlytics.sharedInstance().recordError(error)
        }

        return realm

    }
}

我在辅助线程中调用 _inMemoryRealm 而在主线程中调用 _strongInMemoryRealm,此配置不起作用。

【问题讨论】:

  • 为什么不能正常工作?它有什么作用?
  • 我将对象保存在后台线程上。在具有相同领域 _inMemoryRealm 的同一线程上,我可以获取对象。回到主线程,领域实例 _strongInMemoryRealm 返回一个空数组

标签: swift realm


【解决方案1】:

对于初学者,我建议绝对检查以确保您的主线程领域引用没有被释放。我个人会使用singleton object 将主Realm 引用存储在主线程上。这将是您的 Realm 保持空白的最简单原因。

除此之外,当您在后台对 Realm 进行写入时,这些更改只会在运行循环的下一次迭代中反映在主线程中。如果您需要在此之前反映更改,您可以调用realm.refresh() 明确请求它提取最新更改。

【讨论】:

  • 太棒了!很高兴我能帮上忙! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多