2011-12-24 4 views
2

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

Stock Объекты

Item A 
Item B 

Индивидуальные объекты

Tomatoes 
Potatoes 

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

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

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

Спасибо!

ответ

0

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

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

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

+0

Ну, я не уверен, что хочу нарушить работу пользователя с этой целью. Другая проблема заключается в том, что существуют целые сущности, полные объектов запасов, с которыми мне нужно иметь дело особым образом. Представьте себе объекты FoodType («Мясо», «Овощи», «Десерт» и т. Д.) В отношениях с предприятиями Foods. Даже если все их свойства совпадают, если они были созданы в разное время на разных устройствах, Core Data, похоже, воспринимает их как разные. Поэтому, когда происходит слияние, внезапно у меня есть два «Foodtypes» с мясом, с некоторыми продуктами, связанными с одним объектом, а некоторые связаны с другим. – ed94133

+0

У меня был подобный случай. Я предоставил семенные объекты, которые были полезны - большинство из них никогда не менялись. Одна простая идея - добавить логический атрибут 'validated' и взять оттуда логику. Затем вы можете проверить эквивалентность и «объединить» в фоновом режиме без уведомления пользователя. – Mundi

Смежные вопросы