Изменения NSManagedObject не вызывают objectWillChange - PullRequest
2 голосов
/ 23 сентября 2019

У меня есть модель базовых данных с сущностью, сгенерированной в класс 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.

...