У меня есть стандартная настройка списка SwiftUI, поддерживаемая Core Data FetchRequest.
struct SomeView: View {
var container: Container
var myObjects: FetchRequest<MyObject>
init(container: Container) {
let predicate : NSPredicate = NSPredicate(format: "container = %@", container)
self.container = container
self.myObjects = FetchRequest<MyObject>(entity: MyObject.entity(), sortDescriptors: [NSSortDescriptor(key: "date", ascending: true)], predicate: predicate)
}
var body: some View {
VStack(spacing: 0.0) {
List(myObjects.wrappedValue, id: \.uniqueIdentifier) { myObject in
rowView(for: myObject, from: self.myObjects.wrappedValue)
}
}
}
}
Все хорошо работает, когда элементы добавляются и удаляются. RowView возвращает представление, представляющее различное содержимое на основе различных свойств myObject.
Проблема: когда я изменяю определенный myObject в другом месте приложения (изменяю одно из его свойств) и сохраняю связанный Core Data ManagedObjectContext, Строка списка, представляющая этот элемент, не обновляется / обновляется в пользовательском интерфейсе.
Возможно, причиной этого является то, что я обновляю свой объект Core Data, устанавливая свойство, которое, в свою очередь, устанавливает другое свойство. Возможно связанная с этим сигнализация не достигает нужного места, и мне следует отправлять больше уведомлений здесь.
Код в MyObject. ObjectType - это перечисление, typeValue поддерживает это int32, которое фактически сохраняется в базе данных CD.
var type: ObjectType {
get {
return ObjectType(rawValue: typeValue)!
}
set {
self.typeValue = newValue.rawValue
}
}
Как заставить строку списка обновляться, когда резервный объект базовых данных изменяется и сохраняется в другом месте в приложение?