在我的 Xcode 方案中,我在启动时添加了这个参数:
-com.apple.CoreData.ConcurrencyDebug 1
我现在正试图故意搞砸以查看调试错误,但没有出现。在我的方法中,我在后台任务中抓取一个随机实体并将其发布在通知中:
PersistenceController.shared.container.performBackgroundTask { context in
let random = Int.random(in: 1 ... Int(max))
let request = Number.fetchRequest()
request.predicate = NSPredicate(format: "%K == %d", #keyPath(Number.value), random)
request.fetchLimit = 1
let entities = try! context.fetch(request),
let entity = entities.first!
let userInfo = ["object": entity]
Notification.Name.example.post(userInfo: userInfo)
}
在通知处理程序中,我然后有目的地交叉 MOC:
guard let entity = note.userInfo?["object"] as? Number else {
return
}
viewContext.perform {
let message = entity.display ?? "WTF"
DispatchQueue.main.async {
display = message
}
}
viewContext
是环境提供的,与用于查询实体的上下文不同,为什么我没有失败?
我知道启动标志设置正确,正如我在运行时在控制台中看到的那样:
CoreData:注解:核心数据多线程断言已启用。