2015-04-22 3 views
0

Я хочу отправить изменения, сделанные для любого NSManagedObject, на сервер, и я хочу сделать это в фоновом режиме.Отслеживание изменений, внесенных в NSManagedObject в другой теме

Для этого я хотел бы установить фоновый поток со своим NSManagedObjectContext, который регистрируется для NSManagedObjectContextDidSaveNotification. Однако я не могу получить доступ к changedValues по адресу userInfo's NSInserted/Updated/DeletedObjectsKey, потому что он находится в другом потоке.

Как это можно сделать тогда?

ответ

0

Простой способ: не беспокоить changedValues. Просто отправьте все атрибуты любого управляемого объекта, который изменится. Накладные расходы, как правило, не очень много, и ваш код будет проще.

Если вы действительно хотите отправить только значение атрибутов, которые изменились, она становится все более сложной:

  • Вы может использовать changedValues, так долго, как вы используете NSMainQueueConfinement или NSPrivateQueueConfinementи вас звоните changedValues, используя performBlock: или performBlockAndWait: с блоком, который получает изменения. Получите измененные значения и скопируйте их на что-то вне Core Data. Убедитесь, что весь доступ к чему-либо из Core Data находится в одном из этих блоков. Однако changedValues бесполезно после сохранения, так что ...
  • Если вы используете changedValues, вы должны будете использовать NSManagedObjectContextObjectsDidChangeNotification, чтобы получить уведомление об изменениях, но это может произойти много, так что ...
  • Это, вероятно, лучше использовать NSManagedObjectContextWillSaveNotification, что происходит только тогда, когда вы фактически сохраняете изменения. Там нет userInfo, поэтому вам нужно посмотреть object (будет NSManagedObjectContext), а затем использовать insertedObjects, updatedObjects и deletedObjects, чтобы узнать, какие объекты были изменены.

С помощью этого вы можете получить доступ к измененным значениям, скопировать их в любую структуру данных, которую вы используете, для проведения исходящих изменений, а затем отправить их.

Но я бы пошел с игнорированием changedValues, если это вообще возможно.

+0

Как получить измененный объект из 'NSManagedObjectContextWillSaveNotification', поскольку он не передает никаких [' userInfo'] (https://developer.apple.com/library/ios/documentation/Cocoa/Reference/CoreDataFramework/Classes/ NSManagedObjectContext_Class/index.html # // apple_ref/с/данные/NSManagedObjectContextWillSaveNotification)? – Norbert

+0

Извините, что исправлено. –

Смежные вопросы