Я занимаюсь разработкой приложения, которое необходимо синхронизировать с удаленной базой данных. База данных подключена к веб-приложению, которое позволяет пользователю изменять некоторые записи на веб-странице. (Добавлять / удалять / изменять) Пользователь также может изменять те же записи в мобильном приложении. Таким образом, каждая сторона (сервер-клиент) должна хранить те же самые последние записи, когда пользователь нажимает кнопку синхронизации в мобильном приложении. Связь между сервером и клиентом обеспечивается веб-серверами (SOAP), и я не могу изменить его из-за строгих требований. (я знаю, что это худший способ, который можно использовать). И еще одно требование - клиенты не могут удалять записи сервера.
Я уже знаком с коммуникационным веб-сервисом (NSURLConnection), получением данных (NSData) и их разбором. Но я не мог понять, какой должна быть процедура синхронизации. Я уже прочитал этот ответ, который о том, как я могу изменить стороны сервера и клиента с некоторыми дополнительными атрибутами ( last_updated_date и is_sync )
Тогда я мог бы решить, как решить эту проблему:
В качестве первого шага клиент продолжает пытаться изменить записи сервера, отправляя несинхронизированные записи. Новые записи напрямую добавляются в БД, но измененные записи следует сравнивать в зависимости от last_updated_date . В конце этого шага сервер имеет последние данные .
Но проблема в том, как можно изменить записи в мобильном приложении. Я подумала это двояко:
- самый глупый способ создания нового MOC, загрузки всех записей в него и замены на существующий.
- это получение всех измененных записей, которые не находятся на стороне клиента, импортирование их в новый MOC и объединение этих двух. Но в этот момент у меня есть некоторые проблемы, такие как
Может быть два элемента, которые реплицируются (старая версия - обновленная версия)
Удаленные элементы все еще могут находиться в основных МОС.
Мне нужно связать несколько связей между MOC. (новая запись может иметь более 4 связей со старыми записями)
Так что, я думаю, вы, ребята, можете помочь мне найти другие идеи, которые являются лучшими ??