2015-04-22 65 views
0

我想將對任何NSManagedObject所做的更改發送到服務器,我希望在後臺執行此操作。跟蹤對不同線程上的NSManagedObject所做的更改

因此,我想設置一個後臺線程,它自己的NSManagedObjectContext註冊爲NSManagedObjectContextDidSaveNotification。但是,我不能訪問userInfoNSInserted/Updated/DeletedObjectsKey上的changedValues,因爲它位於不同的線程上。

這怎麼做呢?

回答

0

簡單的方法是:不要打擾changedValues。只需發送更改的任何管理對象的所有屬性。開銷通常不是很大,而且你的代碼會更簡單。

如果你真的要發送已更改屬性的唯一值,它變得更加複雜:

  • 可以使用changedValues,只要您使用NSMainQueueConfinementNSPrivateQueueConfinement你請致電changedValues使用performBlock:performBlockAndWait:與獲取更改的塊。獲取更改後的值並將其複製到Core Data之外的某些內容。確保所有來自核心數據的訪問都位於其中一個塊中。然而changedValues是後保存也沒用,所以...
  • 如果使用changedValues,你需要使用NSManagedObjectContextObjectsDidChangeNotification得到變更通知,但可以發生很多,所以...
  • 它可能會更好要使用NSManagedObjectContextWillSaveNotification,這隻有在實際保存更改時纔會發生。沒有userInfo,所以你必須查看通知的object(這將是一個NSManagedObjectContext),然後使用insertedObjects,updatedObjectsdeletedObjects找出哪些對象已更改。

有了這個,您可以訪問更改後的值,將它們複製到您用來保存傳出更改的任何數據結構中,然後發送它們。

但是如果可能的話,我會忽略changedValues

+0

如何從'NSManagedObjectContextWillSaveNotification'獲取更改的對象,因爲它沒有傳遞任何['userInfo'](https://developer.apple.com/library/ios/documentation/Cocoa/Reference/CoreDataFramework/Classes/ NSManagedObjectContext_Class/index.html的#// apple_ref/C /數據/ NSManagedObjectContextWillSaveNotification)? – Norbert

+0

對不起,現在修復。 –