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

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

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

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

Метод инициализации (пример для отредактированных компаний)

// 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];
...

Вопрос

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 24 июля 2012

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

1 голос
/ 08 мая 2012

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

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

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

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

...