簡單的方法是:不要打擾changedValues
。只需發送更改的任何管理對象的所有屬性。開銷通常不是很大,而且你的代碼會更簡單。
如果你真的要發送已更改屬性的唯一值,它變得更加複雜:
- 您可以使用
changedValues
,只要您使用NSMainQueueConfinement
或NSPrivateQueueConfinement
和你請致電changedValues
使用performBlock:
或performBlockAndWait:
與獲取更改的塊。獲取更改後的值並將其複製到Core Data之外的某些內容。確保所有來自核心數據的訪問都位於其中一個塊中。然而changedValues
是後保存也沒用,所以...
- 如果使用
changedValues
,你需要使用NSManagedObjectContextObjectsDidChangeNotification
得到變更通知,但可以發生很多,所以...
- 它可能會更好要使用
NSManagedObjectContextWillSaveNotification
,這隻有在實際保存更改時纔會發生。沒有userInfo
,所以你必須查看通知的object
(這將是一個NSManagedObjectContext
),然後使用insertedObjects
,updatedObjects
和deletedObjects
找出哪些對象已更改。
有了這個,您可以訪問更改後的值,將它們複製到您用來保存傳出更改的任何數據結構中,然後發送它們。
但是如果可能的話,我會忽略changedValues
。
如何從'NSManagedObjectContextWillSaveNotification'獲取更改的對象,因爲它沒有傳遞任何['userInfo'](https://developer.apple.com/library/ios/documentation/Cocoa/Reference/CoreDataFramework/Classes/ NSManagedObjectContext_Class/index.html的#// apple_ref/C /數據/ NSManagedObjectContextWillSaveNotification)? – Norbert
對不起,現在修復。 –