我正在尝试观察其中一个视图控制器中NSManagedObjectContext的更改。
NotificationCenter.default.addObserver(self, selector: #selector(updateData), name: .NSManagedObjectContextObjectsDidChange, object: DataManager.shared.managedObjectContext)
以下是我的核心数据设置:
class DataManager {
static let shared = DataManager()
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "Store")
container.loadPersistentStores(completionHandler: { storeDescription, error in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
lazy var managedObjectContext: NSManagedObjectContext = {
let context = self.persistentContainer.viewContext
context.automaticallyMergesChangesFromParent = true
context.mergePolicy = NSMergeByPropertyStoreTrumpMergePolicy
return context
}()
}
我有时会收到通知,但有时候我不会收到通知。如果我将对象设置为nil,我会按预期收到通知。如果我在添加观察者时打印出managedObjectContext,并且在调用通知时(使用notificationObserver中的nil对象),它们指向两个不同的managedObjectContexts。我哪里错了?在第一次设置观察者时初始化上下文是否存在某种竞争条件?