RestKit - отправка добавленных / отредактированных / удаленных объектов после автономного хранения

Использование RestKit с основными данными Я предоставляю автономную поддержку, когда пользователь добавляет, редактирует или удаляет объекты без подключения к Интернету, отмечая объекты и сохраняя их с базовыми данными.

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

Список массивов
- fetchedAddedCompanies
- fetchedEditedCompanies
- fetchedAddedContacts
- fetchedEditedContacts
- fetchedDeletedContacts

Метод Init (Пример для редактируемых компаний)

// Added Companies
...

// Edited Companies
for (Company *tempObj in fetchedAddedCompanies)
{
    // Find keys for selected languages
    [self updateAccountToServer:tempObj:addCompanyContext];
}

// ...

В конце updateAccountToServer я публикую объект (self.company) с его отображением на сервере.

...
[objectManager postObject:self.company mapResponseWith:[companyMapper inverseMapping] delegate:self];
...

Вопрос

Я ищу более эффективное решение, когда пользователь обновил несколько объектов и - что особенный - добавил несколько новых объектов, потому что в отличие от всех методов редактирования / удаления сервер возвращает идентификатор для каждого нового созданного объекта, который будет храниться

1) Избегайте использования, например, updateAccountToServer для каждого редактируемого объекта и вместо этого отправляйте массив объектов
2) Использование RKRequestQueue вместе с RKObjectManager ( относительно этого вопроса и хорошего ответа)

По моему мнению, 1) будет трудно реализовать, потому что resourcePath для каждого запроса содержит уникальный идентификатор, поэтому я попробовал 2), но упустил возможность привязать сопоставление для каждого запроса, используя

[syncQueue addRequest:[[RKObjectManager sharedManager] objectLoaderWithResourcePath:tempString delegate:self]]; 

Спасибо за ваши идеи!

2 ответа

Решение

Я и некоторые другие активно работаем над веткой разработки, чтобы автоматически интегрировать это в RestKit.

Мы реализуем диспетчер синхронизации внутри RK, который следит за изменениями в NSManagedObjectContext, и, если сеть недоступна, ставит эти запросы в очередь до тех пор, пока сеть не вернется.

Мы хотели бы получить больше помощи / идей по коду, поэтому, если бы вы могли рассказать нам больше о вашем сценарии использования на этой странице:

https://github.com/RestKit/RestKit/pull/573

Для 1 вы можете инкапсулировать NSArray вставленных / обновленных / удаленных объектов в новый объект, а затем опубликовать его на сервере. Чтобы это работало, вам нужно убедиться, что на измененных объектах установлены правильные биты для расшифровки сервером, а также убедиться, что сервер может получить объект, и деконструировать его, чтобы получить массив измененных объектов.

Другие вопросы по тегам