ios - Realm Swift 如何将观察者添加到对象类型(无)

标签 ios swift realm

假设我有两个流程:

1) 我在数据库中有数据,然后我使用从数据库中获取带有参数的实体并设置和观察者。之后我从服务器加载数据并且观察者的 block 成功触发。没关系。

2) 我的数据库中没有数据。然后我尝试做同样的事情,它看起来像:

    myObject = MyRealmService()
        .fetchAll(MyRealmObject.self,
                  filter: "userID == \(someID)")?
        .first
    realmToken = myObject?.observe { [weak self] change in
        guard let _self = self else { return }

        switch change {
        case .deleted:
            _self.popCurrentViewController()
        case .error(let error):
            _self.show(error: error)
        case .change:
            _self.updateUI()
        }
    }

    loadDataFromServer() { object in
         object.saveToRealm()
    }

那么 myObject 为 nil,所以通知 block 不设置。

这样处理通知的方法是什么?我的意思是,也许我们可以通过某种方式将 block 设置为过滤器类型 (MyRealmObject.self, filter: "userID ==\(someID)"),因此如果在 Realm 中写入适合它的对象, 然后 observe 方 block 会开火吗?

最佳答案

您可以观察 Realm Results,而不是观察仍未存储在 Realm 数据库中的单个对象。

   let realm = try! Realm()

    var results = realm.objects(MyRealmObject.self).filter: "userID == \(someID)")

    var notificationToken = results.observe { change in
        switch change {
        case .update:
            DispatchQueue.main.async {
                block()
            }
        default: ()
        }
    }

您可以观察结果对象而不是单个对象,并根据变化执行一些操作。

关于ios - Realm Swift 如何将观察者添加到对象类型(无),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53890573/

相关文章:

ios - 希望快速将用户输入发送到网络服务器并加载结果

Swift 只调用递归函数 X 次

android - RealmDB - React Native - 无法在路径 '.management' 打开 Realm

realm - 使用链接属性创建 Realm 记录

ios - 更改 UISegmentedControl 文本

ios - MapBox GL 从 makefile 构建 Xcode 项目

ios - UITextfield 的 NSDictionary 元素

ios - 如何在 SwiftUI 中更改步进器的背景颜色?

ios - 解析Back4App iOS Swift“PFUser.logInWithAuthType(inBackground:苹果”)方法将任务返回为nil

java - 使用 Realm 异步更新 ListView