2016-01-13 51 views
0

最近,當調查UIPickerView的一些奇怪的UI行爲時,我得出了這樣的結論,那是因爲我正在重新加載它的組件,它被稱爲觀察NSManagedObjectContextObjectsDidChangeNotification。事情是,至少我很確定這將始終從主線程中調用。但是我錯了。我使用UIManagedDocument,有時我從另一個線程以下通知:CoreData ContextObjectsDidChangeNotification從另一個線程調用

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元素的目的。此外,我不知道AdditionalAssetAttributesSidecarFile是。

謝謝!

+0

你觀察'NSObjectsChangedInManagingContextNotification'或'NSManagedObjectContextObjectsDidChangeNotification'?你的問題說一個,但你的輸出顯示另一個。 –

+0

我想'NSObjectsChangedInManagingContextNotification'是NSManagedObjectContextObjectsDidChangeNotification'的'值。 –

+0

剛試過這裏:'的NSLog(@ 「%@」,NSManagedObjectContextObjectsDidChangeNotification);'打印:'NSObjectsChangedInManagingContextNotification' –

回答

0

我經常看到此通知,以及iOS的11的沒有太多的文檔,但似乎如果通知的userInfo包含密鑰NSInvalidatedAllObjectsKeyinvalidatedAll),則必須重新獲取來自文檔的所有NSManagedObject的那你的應用程序也有參考。未能看到會使他們全部不再可用。數組的內容可以忽略不計(例如我經常發現它是空的)

相關問題