Простой способ: не беспокоить changedValues
. Просто отправьте все атрибуты любого управляемого объекта, который изменится. Накладные расходы, как правило, не очень много, и ваш код будет проще.
Если вы действительно хотите отправить только значение атрибутов, которые изменились, она становится все более сложной:
- Вы может использовать
changedValues
, так долго, как вы используете NSMainQueueConfinement
или NSPrivateQueueConfinement
и вас звоните changedValues
, используя performBlock:
или performBlockAndWait:
с блоком, который получает изменения. Получите измененные значения и скопируйте их на что-то вне Core Data. Убедитесь, что весь доступ к чему-либо из 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/с/данные/NSManagedObjectContextWillSaveNotification)? – Norbert
Извините, что исправлено. –