Realm Swift, как добавить наблюдателя к типу объекта (ноль) - PullRequest
0 голосов
/ 21 декабря 2018

Предположим, у меня есть два потока:

1) У меня есть данные в базе данных, затем я использую выборочную сущность с параметрами из базы данных, набор и наблюдателя.После этого я загружаю данные с сервера, и блок наблюдателя успешно срабатывает.Это нормально.

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, поэтому блок уведомлений не устанавливается.

Как обрабатывать уведомления в этомпуть?Я имею в виду, может быть, каким-то образом мы можем установить блок на тип фильтра (MyRealmObject.self, filter: "userID == \(someID)"), поэтому, если в области есть запись объекта, который ему подходит, то блок наблюдения срабатывает?

1 Ответ

0 голосов
/ 22 декабря 2018

Вместо того, чтобы наблюдать за отдельным объектом, который все еще не сохранен в базе данных Realm, вы можете наблюдать за Realm Results

   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: ()
        }
    }

Вы можете наблюдать за объектом результата вместо отдельного и выполнять некоторые действияна основании изменений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...