Core Data, iCloud и стоковые объекты

Я обновляю локальное приложение, управляемое Core Data, для поддержки iCloud. Одна из проблем, которую я предполагаю, связана с тем, что я называю «стандартными объектами» — начальными данными, которые приложение предоставляет при первом запуске, и которые 99% пользователей будут настраивать.

Стандартные объекты

Item A
Item B

Пользовательские объекты

Tomatoes
Potatoes

Если пользователь затем запускает приложение в первый раз на новом устройстве, я думаю, что поведение по умолчанию будет заключаться в повторном создании стандартных объектов, которые будут объединены с настроенными объектами из постоянного хранилища iCloud (элемент A, элемент B, помидоры, картофель), что приводит к беспорядочному взаимодействию с пользователем.

Один из подходов может состоять в том, чтобы синхронно проверять данные iCloud при первом запуске и, если они существуют, не создавать стандартные объекты. Но, тем не менее, пользователь может быть в автономном режиме при первом запуске, а затем при втором запуске произойдет такое же нежелательное слияние локальных стандартных объектов с пользовательскими объектами iCloud.

Существуют ли способы добавить логику к слияниям iCloud, чтобы при поступлении настраиваемых объектов из облака (помидоры и картофель) можно было сигнализировать мне об удалении локальных складских объектов (элемент A и элемент B) до того, как они будут переданы?

Спасибо!


person ed94133    schedule 24.12.2011    source источник


Ответы (2)


Почему бы вам просто не избежать этого, не предоставляя начальные объекты? Просто предложите пользователю через пользовательский интерфейс ввести свои собственные объекты при первом запуске. Спросите, использовала ли она это приложение раньше, и объясните, что стоит подождать с синхронизацией из iCloud, прежде чем воссоздавать объекты.

person Mundi    schedule 24.12.2011
comment
Ну, я не уверен, что хочу заранее беспокоить пользователя. Другая проблема заключается в том, что существуют целые сущности, полные стандартных объектов, с которыми мне нужно иметь дело особым образом. Представьте себе стандартные объекты FoodType (мясо, овощи, десерт и т. д.) во взаимосвязи с сущностями Foods. Даже если все их свойства совпадают, если они были созданы в разное время на разных устройствах, Core Data, кажется, видит их разными. Поэтому, когда происходит слияние, внезапно у меня появляется два типа Meat FoodTypes, причем некоторые продукты связаны с одним объектом, а некоторые — с другим. - person ed94133; 25.12.2011
comment
У меня был похожий случай. Я предоставил исходные объекты, которые были полезны — большинство из них никогда не менялись. Одна простая идея — добавить логический атрибут validated и взять оттуда логику. Затем вы можете проверить эквивалентность и выполнить слияние в фоновом режиме без ведома пользователя. - person Mundi; 25.12.2011

Я не уверен, что это лучший подход, но вот что я делаю:

  1. Когда пользователь решает включить iCloud, я проверяю, не пуст ли его каталог iCloud.
  2. Если да, то нет проблем; Я переношу базу данных в новое локальное хранилище, в котором включены параметры iCloud, чтобы все существующие данные перемещались в облако.
  3. Если нет, я проверяю, пуста ли локальная база данных. Если да, то я стираю все стоковые объекты и беру все из облака. Если это не так, я сообщаю пользователю, что в настоящее время приложение не может объединить локальную базу данных с базой данных iCloud, и прошу их удалить свои данные (или переустановить), тем самым обойдя эту проблему.
person ed94133    schedule 03.01.2012