Я искал синхронизацию в реальном времени, как реализовано в примере приложения «Задачи» в Realm.Можно ли использовать реальную синхронизацию реального сервера объектов Realm без индексов?
В частности, этот блок:
private func setupNotifications() -> NotificationToken {
return parent.items.addNotificationBlock { [unowned self] changes in
switch changes {
case .Initial:
// Results are now populated and can be accessed without blocking the UI
self.viewController.didUpdateList(reload: true)
case .Update(_, let deletions, let insertions, let modifications):
// Query results have changed, so apply them to the UITableView
self.viewController.tableView.beginUpdates()
self.viewController.tableView.insertRowsAtIndexPaths(insertions.map { NSIndexPath(forRow: $0, inSection: 0) }, withRowAnimation: .Automatic)
self.viewController.tableView.deleteRowsAtIndexPaths(deletions.map { NSIndexPath(forRow: $0, inSection: 0) }, withRowAnimation: .Automatic)
self.viewController.tableView.reloadRowsAtIndexPaths(modifications.map { NSIndexPath(forRow: $0, inSection: 0) }, withRowAnimation: .None)
self.viewController.tableView.endUpdates()
self.viewController.didUpdateList(reload: false)
case .Error(let error):
// An error occurred while opening the Realm file on the background worker thread
fatalError(String(error))
}
}
}
В основном изменения передаются с помощью индексов. Путем простого доступа к объекту подклассов/объектам области, используя эти индексы, интерфейс обновляется.
Теперь у меня есть архитектура, которая не кажется совместимой с этим. У меня есть выделенный уровень базы данных (из которых realm - это реализация), где я загружаю объекты области в фоновый поток и сопоставляюсь с обычными объектами модели. Таким образом, я отключаю свой код от реализации базы данных и могу использовать неизменяемые модели.
Я не уверен, как обрабатывать индексы в этом случае. Похоже, я должен запомнить исходный запрос, сделать это снова, а затем получить доступ к записям, которые мне нужны, используя эти индексы? Это звучит очень неэффективно ...
Кроме того, я не знаю, как индексы работают с определенными запросами типа «все элементы, имеющие статус x в поле y». Получается ли индекс, который я получаю, относится к этому конкретному запросу?
Каков рекомендуемый способ продолжения здесь?
Редактирование: просто для добавления дополнительных комментариев я реализовал синхронизацию с использованием настраиваемого сервера и веб-сайтов, и вместо семантических ключей я использовал семантические ключи (иногда даже отправлял полный объект, чтобы избежать необходимости запрашивать базу данных). Таким образом, я не имел дело с возможными несоответствиями, связанными с доступом на основе индексов. Интересно, если что-то подобное возможно или планируется с помощью Realm sync в какой-то момент.
P.S. Я намерен переключиться на Realm sync, потому что мой пользовательский сервер не очень хорошо протестирован и очень сложно поддерживать. Надеюсь, что это возможно.
Рекомендуется использовать базу данных нулевой копии как базу данных с нулевой копией, а не отображать все, но вы можете прочитать об этом в [официальной документации] (https://realm.io/ docs/swift/latest/#) – EpicPandaForce
Ну, развязка кода интерфейса из реализации БД была тем, что позволило мне в первую очередь переключиться на сферу. Конечно, у меня есть недостатки, я знаю об этом. – Ixx