Как заполнить пустую базу данных CoreData из удаленного хранилища Simperium?

Я использую SimpletodoFinal.xcodeproj, включенный в образцы Simperium. Образец работает отлично, и я вижу элементы, синхронизированные между симулятором iOS и веб-приложением, подключенным к хранилищу данных Simperium.

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

Проблема в том, что приложение пустое. Удаленные данные не синхронизируются для заполнения новой базы данных. Кто-нибудь знает, почему это может быть? Нужно ли как-то запускать синхронизацию вручную при запуске?

Спасибо.

2 ответа

Решение

Обнуление хранилища sqlite может вызвать проблемы, поскольку Simperium также использует несколько хранилищ метаданных для определения текущего состояния синхронизации.

Попробуйте вместо этого вызвать метод [simperium signOutAndRemoveLocalData:YES], который является предпочтительным способом удаления всего.

Причина, по которой удаленные изменения не были загружены, заключается в том, что клиент считал их актуальными. В файле настроек (/Library/Preferences/com.codality.SimpletodoFinal.plist) была запись, подобная этой:

lastChangeSignature-Todo: 52a22dc4ba5fdc4e28e0fa8a

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

Поскольку в файле настроек были устаревшие данные, мой эксперимент не дал точного представления о том, как пользователь вводит новое устройство.

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

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