ios - 我可以直接在对象数据模型中创建 realm.writes 吗?

标签 ios swift multithreading realm

我正在编写一个使用某些对象的 Realm 数据持久性的应用程序。
为了清理/改造我的代码(从 View 和 Controller 中获取 realm.write),我尝试将它们直接放在持久对象类中。
逻辑基本上是这样的:

class PersistedObject: Object {
   public var data: String {
      get { _saved_data }
      set {
         do { try realm?.write { _saved_data = newValue }
         } catch { print(error) }
      }
   }

   @objc dynamic private var _saved_data = "hello there"
}
这样,我就可以从 View Controller 访问和重写 Realm 对象属性,而不需要 realm.write s 直接在里面。反正就是这个想法。
这有时有效。其他时候,应用程序因错误而崩溃......

"Realm accessed from incorrect thread"


...这是我目前正在尝试解决的问题。
这是我的第一个 iOS 应用,也是我第一次使用 Realm。
  • 像这样组织代码是否有意义(我发现在这种方法的支持方面很少,但在使用 Realm 时的 MVC 最佳实践方面通常也很少)
  • 如果它确实有意义,我该如何解决从不正确的线程访问 Realm 的问题,同时仍然执行 realm.write s 直接在对象类中?

  • 提前致谢! :)
    西蒙

    最佳答案

  • 像这样组织代码是没有意义的。您将只能从创建它的同一线程写入
  • 要修改来自不同线程的对象,您可以使用 ThreadSafeReference例如
  • 关于ios - 我可以直接在对象数据模型中创建 realm.writes 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63074835/

    相关文章:

    swift - 如何消除同名类型和模块的歧义?

    ios - 如何在 UIScrollView 滚动到 maxY 时触发动画? swift

    visual-studio - 在 Visual Studio 调试器中中断线程创建

    windows - QueryPerformanceCounter 和线程安全

    ios - Realm移动平台打造通用 Realm

    ios - 缓存图 block 的 MKTileOverlay 子类

    iOS模拟器不更新

    ios - 如何在iOS中获取复制的图片?

    python - Swift vDSP rFFT 与 Python np.fft.rfft() 不同

    multithreading - 如何从Qtreeview中删除项目?