В настоящее время я провожу некоторые тесты с Ensembles, в частности тестируя легкую миграцию Core Data.
Моя текущая конфигурация выглядит следующим образом:
- Устройство-A запускает мое приложение с моделью данных 1
- Устройство-B запускает мое приложение с моделью данных 2
- модель данных 2 основана на модели данных 1 с одним дополнительным строковым свойством, которое является необязательным.
Мой сценарий выглядит следующим образом:
- Вначале при запуске моего приложения с моделью данных 1 как на устройстве A, так и на устройстве B все отлично синхронизировалось с использованием Ensembles (конфигурация iCloud).
- На устройстве-B установите и запустите мое обновленное приложение, используя модель данных 2.
- На устройстве-A продолжайте запускать мое старое приложение, используя модель данных 1, и добавляйте новую запись.
- Результат: новая запись, добавленная на Устройство-А, загружается в iCloud, а затем синхронизируется с устройством-Б.
Мой вопрос: могу ли я настроить Ensembles, чтобы предотвратить загрузку изменений в iCloud, если эта связанная модель данных не является последней? (т.е. в моем случае Device-A загружает объект на основе модели данных 1, в то время как iCloud уже основан на модели данных 2)
Заранее спасибо!
ОБНОВЛЕНИЕ 1:
Дрю, большое спасибо за ответ. Я определенно согласен с тем, что загрузку нельзя (и, вероятно, не следует) предотвращать, поскольку Ensembles — это децентрализованная одноранговая система.
В идеальном случае хотелось бы, чтобы устройство с новой моделью данных игнорировало данные, основанные на старой модели данных. (аналогично существующему поведению, когда устройство со старой моделью данных будет игнорировать любые данные, основанные на новой модели данных). Это поддерживается?
Если нет, рассмотрите в качестве примера следующий сценарий:
- В старой модели данных есть объект под названием «Книга» с двумя свойствами: название и автор (оба поля необязательны).
- В новой модели данных есть новое необязательное свойство titleFirstLetter, которое должно содержать первую букву поля заголовка.
В настоящее время, когда Ensembles не задействован, у меня есть полный контроль при сохранении нового NSManagedObject в хранилище постоянства. Поэтому обновленный код моего приложения, отвечающего за добавление новой книги, обязательно извлечет первую букву из поля заголовка и сохранит ее в новом свойстве titleFirstLetter. (т. е. книга под названием Catch-22 будет иметь C в свойстве titleFirstLetter при сохранении книги).
Кроме того, когда в основном стеке данных происходит легкая миграция, я обнаруживаю это и выполняю одноразовую процедуру, в которой перебираю все существующие книги в базе данных и устанавливаю titleFirstLetter в соответствии со значением title. С этого момента и далее база данных является согласованной и действительной, а новый код гарантирует, что будущие книги, добавленные в базу данных, сохранят ее действительность.
Что касается Ensembles, если у меня нет никакого контроля над старыми данными, поступающими от устройств с более старой моделью данных, как я могу заполнить новое свойство titleFirstLetter, если мой код никогда не вызывается?
Спасибо Вам за Вашу помощь!