SwiftUI с RealmSwift — Автоматическое обновление представлений SwiftUI

#swiftui #realm #realm-list

Вопрос:

Есть ли способ автоматически обновлять представления, когда они зависят от RealmSwift.Список другого объекта (пожалуйста, смотрите код в конце). Например, при внесении любых изменений в объект «ItemDB» я бы вызвал objectWillChange.send(). После написания в realm мои взгляды будут реагировать на изменения в области. Однако, если я сделаю то же самое с «ItemsDB» (objectWillChange.send() после моей записи в область a), мое представление НЕ будет автоматически отображать изменения. Но если я закрою, а затем снова открою представление, информация будет показана.

 class ItemDB: Object {
 @objc dynamic var title = ""
 let items = List<Items>()
}

class ItemsDB: Object {
 @objc dynamic var name = ""
 let parentList = LinkingObjects(fromType: Group.self, property: items)
}

class Item: Identifiable {
 let title: String
//assume this is initialized
}

class Store: ObservableObject {
 var results: Results<Item>
 //assume this is all initialized
 var item [Item] {
 //mapped
 }

 func newItem() {
  objectWillChange.send()
  //Followed by a write to realm works perfectly
 }

 func newItems() {
  objectWillChanged.send()
  //Followed by a write of ItemsDB to realm does not automatically update SwiftUI view.
 }
}
 

Любое понимание, где будет высоко оценено.

Комментарии:

1. Вопрос (и код) немного расплывчаты. В базе данных ItemDB есть List<Items>() объекты, но Items объекты не отображаются. Если вы предполагали , что это Item так, это не объект области, поэтому он не доступен для изменений (вы можете сделать его объектом NSObject и KVO или другими опциями). Неясно, что или почему используется objectWillChange.send () — Область предоставляет события, когда объекты или коллекции меняются, так почему бы не использовать эту встроенную функциональность?