У меня есть модель базовых данных с сущностью, сгенерированной в класс Task
.Я пытаюсь заставить издателя Combine objectWillChange
из NSManagedObject
отправить (автоматически, без ручной работы), но это не так.Объект задачи имеет атрибут name
.
let task = Task(context: container.viewContext)
let taskSubscription = task.objectWillChange.sink(receiveValue: { _ in
print("Task changed")
})
task.name = "Foo" // WILL NOT trigger
Если я вызову send вручную, подписка будет работать:
task.objectWillChange.send() // Will trigger
Если я заменим это на простой ObservableObject
,он будет работать, как и ожидалось:
class DummyTask: ObservableObject {
@Published var name: String?
}
let dummy = DummyTask()
let dummySubscription = dummy.objectWillChange.sink(receiveValue: { _ in
print("Dummy changed")
})
dummy.name = "Foo" // Will trigger
dummy.objectWillChange.send() // Will trigger
Не прослушивается ли NSManagedObject?Как я должен наблюдать за общим объектом сущности на предмет изменений?Как мне заставить SwiftUI их видеть?
Это с использованием Xcode 11.0 и iOS 13.