最近在调查 UIPickerView 的一些奇怪的 UI 行为时,我得出的结论是因为我在一个名为观察 NSManagedObjectContextObjectsDidChangeNotification 的选择器中重新加载它的组件。问题是,至少我很确定这将始终从主线程调用。但是我错了。我正在使用 UIManagedDocument,有时我会从另一个线程收到以下通知:
NSConcreteNotification 0x14a2664b0 {name = NSObjectsChangedInManagingContextNotification; object = <NSManagedObjectContext: 0x14a3e1be0>; userInfo = {
invalidatedAll = (
"0xd00000000d5c000e <x-coredata://B12EF0BD-E372-44D2-AF2F-8E28C5EF3E00/AdditionalAssetAttributes/p855>",
"0xd00000000d58000e <x-coredata://B12EF0BD-E372-44D2-AF2F-8E28C5EF3E00/AdditionalAssetAttributes/p854>",
"0xd00000000d5c000c <x-coredata://B12EF0BD-E372-44D2-AF2F-8E28C5EF3E00/Asset/p855>",
"0xd00000000d58000c <x-coredata://B12EF0BD-E372-44D2-AF2F-8E28C5EF3E00/Asset/p854>",
"0xd000000001d40018 <x-coredata://B12EF0BD-E372-44D2-AF2F-8E28C5EF3E00/SidecarFile/p117>",
"0xd000000001d00018 <x-coredata://B12EF0BD-E372-44D2-AF2F-8E28C5EF3E00/SidecarFile/p116>"
);
managedObjectContext = "<NSManagedObjectContext: 0x14a3e1be0>";
我的问题是:有谁知道为什么要调用此通知? invalidateAll 元素的用途是什么。我也不知道什么是 AdditionalAssetAttributes 或 SidecarFile。
谢谢!
最佳答案
与 iOS 11 一样,我经常看到此通知。文档不多,但似乎通知的 userInfo
包含键 NSInvalidatedAllObjectsKey
(invalidatedAll),那么您必须从您的应用程序也引用的文档中重新获取所有 NSManagedObject。如果看不到,它们就不再可用。数组的内容可以忽略(例如我经常发现它是空的)
关于ios - 从另一个线程调用的 CoreData ContextObjectsDidChangeNotification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34757330/