Как заполнить пустую базу данных 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. Затем я перезапустил приложение и, конечно же, все удаленные данные были правильно загружены.