Синхронизация iOS - что хороший способ для объекта Core Data знать, что он должен быть перенесен на сервер?

Я создаю синхронизацию между iPad и веб-сервером. Я использую подход, близкий к описанному здесь . У меня только один тип объекта, пусть он называется Story, который должен быть синхронизирован. Это объект Core Data (управляемый объект).

Остальная проблема, которую я должен решить, - это знать "всякий раз, когда что-то меняется и должно быть синхронизировано с сервером". Один из подходов заключался бы в том, чтобы найти каждый фрагмент кода, который модифицирует историю, и также установил некоторый флаг requireSyncing. Это не кажется элегантным, и кажется, что со временем разработчики могут забыть обновить флаг для новых типов модификаций.

У объектов Core Data есть способ наблюдать за собой, поэтому в любое время, когда происходят какие-либо изменения, выполняется конкретный метод? Это сделало бы это довольно легко.

Другим вариантом может быть использование метода isUpdated прямо перед выполнением операции сохранения в контексте управляемого объекта. Вам нужно либо сохранить вызов только в одном месте, либо сделать это в любом месте, которое вы сохраняете (это звучит как первый вариант). Думаю, я мог бы сделать вспомогательный метод, который проходит через все объекты Story прямо перед сохранением и проверяет, нужен ли какой-либо из них, чтобы их флаг был установлен. Единственным недостатком этого является то, что я буду обходить все объекты Story в системе для любого сохранения, даже для сохранения, которое не имеет ничего общего со Историей.

В любом случае я перестану пытаться угадать решение вслух - есть ли у кого-нибудь опыт с хорошим способом сделать это?

Ответ 1

SDK у вас есть. См. ссылка на класс NSManagedObjectContext, в самом конце страницы MOC отправит уведомления, на которые вы можете подписаться, включая NSManagedObjectContextObjectsDidChangeNotification. Вы можете прослушивать их и выполнять вызов обновления, в значительной степени совпадающий с сохранением MOC.