CoreData и iCloud

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

Это правда? В книге, которую я читаю на тему основных данных, упоминается, что iCloud + CoreData была ненадежной в iOS 5, но с тех пор исправлена, однако я также слышал обратное, что iCloud + CoreData все еще ненадежен в iOS 6. В таком случае хранение база данных в произвольном формате поможет вообще?

Любая помощь будет принята с благодарностью.

 john smith12 июн. 2013 г., 19:51
@ Эми, что меня смущает, так это то, что некоторые люди говорят, что это работает, а некоторые говорят, что это победило.t, конечно, если есть структурные проблемы с iCloud + CoreData, их последствия будут универсальными. Кстати, в связанной статье упоминается TICoreDataSync, есть ли у вас опыт работы с этой платформой?
 Amy Worrall12 июн. 2013 г., 14:21
У многих разработчиков все еще возникают проблемы с синхронизацией Core Data iCloud даже в iOS 6: см.Эта статья для недавней точки зрения. В iOS 7 все могло улучшиться: этовсе еще под NDA, так что никтоделятся своим опытом.
 Duncan Groenewald14 янв. 2014 г., 00:40
Я только что опубликовал пример приложения Core Data в стиле библиотеки iOS, которое включает интеграцию с iCloud. Приложение включает в себя набор настроек для пользователя "Используйте iCloud " Настройки предпочтений и перенесут хранилище в и из iCloud в зависимости от настроек пользователя. Загрузите по ссылке ниже - извините за документацию - в какой-то момент можно обойти это, но она работает почти так же, как пример UIManagedDocument.ossh.com.au/design-and-technology/software-development

Ответы на вопрос(3)

Ссылка на видео изменилась:https://developer.apple.com/videos/wwdc/2013/?id=207

Редактировать: Это должен быть комментарий к последнему ответу, но я нене имеет необходимой репутации 50+ :(

 mluisbrown07 апр. 2014 г., 17:52
Благодарю. Я'обновили ссылку в ответе и проголосовали за ваш ответ, чтобы помочь вам с 50+ повторениями :)

Я получил версию Swift на основе @mluisbrown 's iCloudCoreDataStack, с некоторым кодом, сгенерированным Xcode и технической поддержкой Apple, по адресуhttps://github.com/hyouuu/iCloudCoreData-Swift

Возможно, я допустил очевидные ошибки - пожалуйста, помогите сделать это лучше!

Решение Вопроса

Теперь, когда iOS 7 была выпущена, мы можем поговорить об этом. И, похоже, все указывает на то, что в iOS 7 синхронизация iCloud Core Data была исправлена. Я'Я собираюсь добавить синхронизацию iCloud Core Data в приложение (только для iOS 7).м здание, так что я могупока не говорю из личного опыта, но все, что ямы слышали, что этоТеперь хорошо для прайм-тайма.

Я настоятельно рекомендую смотреть "Какие'Новое в Core Data и iCloud » сессионное видео с WWDC 2013:https://developer.apple.com/videos/wwdc/2013/?id=207 (требуется членство в программе Apple Developer Program). Я'мы смотрели его дважды, и онимы определенно сделали вещимного более простой.

Наконец, я рекомендую взглянуть наUbiquityStoreManager на GitHub. Это'Библиотека, которая в значительной степени выполняет все болезненные части основных данных iCloud для вас. Это'Он был изменен с учетом значительных улучшений в iOS 7, хотя, если вы хотите воспользоваться ими, ваше приложение должно быть только для iOS 7 (это применимо независимо от того, используете вы библиотеку или нет).

ОБНОВИТЬ: С момента публикации этого ответа я сейчасМожно Исходя из личного опыта, я могу подтвердить, что Core Data iCloud Sync в iOS 7 надежна и чтоБолее того, невероятно легко реализовать. Я добавил его в свое приложение, не используяUbiquityStoreManager или любая другая сторонняя библиотека, и это было очень просто. Буквально всего несколько строк кода.

РЕДАКТИРОВАТЬ: Я создал репозиторий GitHub с моим стеком iCloud Core Data для iOS 7. Надеюсь, это поможет:https://github.com/mluisbrown/iCloudCoreDataStack

 mluisbrown26 нояб. 2013 г., 12:44
@phantomlimb Я делаю. В основном вы просто используетеmigratePersistentStore:toURL:options:withType:error: и предоставитьNSPersistentStoreUbiquitousContentNameKey значение в параметре параметров. Если вам нужна дополнительная информация, лучше свяжитесь со мной по электронной почте, а не используйте эти комментарии.
 erdekhayser31 янв. 2014 г., 04:18
@Abras @mluisbrown При реализации этого стека в моем существующем приложении мне пришлось опуститьmigrate... потому что это произошло автоматически, и это создало дублирующиеся объекты. Это очень удобно, и у меня не было с этим проблем (когда я впервые реализовал этот стек, я написал много кода, чтобы попытаться выполнить миграцию вручную, только для того, чтобы выяснить, что мне это не нужно. Было бы лучше узнайте, прежде чем был написан посторонний код!)
 Bright Lee23 окт. 2013 г., 03:54
о, ты уже сделал!
 Charlie29 окт. 2015 г., 14:39
Я понимаю, что яЯ поднимаю очень мертвое обсуждение здесь, но кто-нибудь видел проблемы с этим примером проекта github теперь, когда ios9 / swift2 был выпущен? У меня невероятные проблемы.
 hyouuu06 мар. 2014 г., 03:13
Спасибо за быстрый ответ @mluisbrown! К сожалению, пользователь, который сообщил о потерянном, не сделалt, кажется, удалил приложение; еще одно наблюдение заключается в том, что синхронизация между iPhone и iPad является непонятной, одно поведение заключается в том, что элементы, созданные из iPhone, будут появляться на iPad, а не наоборот. Вы сталкивались с подобными проблемами вообще?
 real 1917 апр. 2014 г., 03:35
Спасибо :) классно! Продолжайте обновлять этот репозиторий github. Любить это
 DogCoffee27 мая 2014 г., 15:46
Наконец, основные данные и iCloud работают вместе! Отличная работа с GIT, лучший ответ на всю сеть :-)
 erdekhayser19 нояб. 2013 г., 23:25
Это просто интегрировано? Там должно быть больше настроек. Должен!
 mluisbrown29 нояб. 2013 г., 10:48
@AbrasmigratePersistentStore:toURL:options:withType:error: перенесет все данные из одного хранилища в другое. Это не делает обнаружение дубликатов, это зависит от вас. Итак, если вы перенесете свой локальный магазин в iCloud, а затем снова вернетесь, выв конечном итоге все ваши записи будут дублированы. OTOH яиметь иногда появляется iCloud для автоматического переноса данных из локального хранилища без вызоваmigrate... совсем. Тот'ошибка
 mluisbrown20 нояб. 2013 г., 02:23
@foriinrangeawesome да, это 'это действительно так просто :-)
 xy uber.com23 нояб. 2013 г., 07:06
Спасибо вам'мой герой !!!
 erdekhayser20 нояб. 2013 г., 02:37
@mluisbrown У меня только один вопрос. Вы знаете, почему я получаю сообщение об ошибкеentityForName: nil is not a legal NSManagedObjectContext parameter searching for entity name в этом случае? Я изменил методы для storeURL и modelURL, поэтому я не уверен, почему это происходит.
 xy uber.com26 нояб. 2013 г., 21:27
@mluisbrown Спасибо! Я'Я попробую это, и, возможно, снова побеспокою вас по электронной почте!
 Crashalot23 апр. 2016 г., 10:52
Привет @mluisbrown Знаете ли вы, есть ли другой способ написать общедоступную базу данных в качестве администратора, чтобы заполнять и поддерживать данные, не требуя входа в icloud? полный вопрос:stackoverflow.com/questions/36808601/...
 hyouuu07 нояб. 2014 г., 18:13
Я получил версию Swift на основе @mluisbrown 's iCloudCoreDataStack, с некоторым кодом, сгенерированным Xcode и технической поддержкой Apple, по адресуgithub.com/hyouuu/iCloudCoreData-Swift  Возможно, я допустил очевидные ошибки - пожалуйста, помогите сделать это лучше!
 mluisbrown20 нояб. 2013 г., 03:18
@foriinrangeawesome эта ошибка означает, что вашNSManagedObjectContext ноль Либо он никогда не был инициализирован, либо вымы установили его на ноль где-нибудь. Смотрите ответы на этот вопрос:stackoverflow.com/q/11596487/368085, Очень маловероятно, что этосвязано с iCloud.
 Abras29 нояб. 2013 г., 03:02
@mluisbrown Иногда после запуска migratePersistentStore: toURL: options: withType: error: вся моя модель дублируется. Похоже, в некоторых случаях iCloud автоматически переносит его для меня. У тебя есть идеи почему?
 mluisbrown31 окт. 2013 г., 00:31
@ Александр Лонг, не знаю, но я думаю, чтопросто время, необходимое для доступа к серверам iCloud. Ничего не поделаешь, AFAIK. Я'Вы заметили, что на симуляторе вам, в основном, приходится принудительно синхронизировать данные вручную (⇧⌘Я) иначе это займет вечность. Нет проблем на устройстве.
 hyouuu20 мар. 2015 г., 08:52
Мне просто интересно, как всеопыт был? Пользователи моего приложения по-прежнему случайно теряют данные после обновления приложения или время от времени ничего не делают :(
 xy uber.com26 нояб. 2013 г., 10:37
@mluisbrown Знаете ли вы, как перенести существующий стек не-iCloud в iCould?
 mluisbrown06 мар. 2014 г., 10:07
@hyouuu У меня были похожие проблемы, хотя, если уделить достаточно времени, все со временем синхронизировалось. Это проблемы самого iCloud, а не кода. Кстати, если вы хотите продолжить это, пожалуйста, создайте проблему на GitHub, это неэто подходящее место для этого :)
 mluisbrown05 мар. 2014 г., 02:04
@hyouuu там "Нет причин, по которым обновление приложения должно привести к потере данных. Однако, если приложение будет удалено и переустановлено, приложению может потребоваться некоторое время (несколько минут) для синхронизации его данных с iCloud, и это может создать впечатление, что данные исчезли. Это не имеет ничего общего с PersistentStack, этоПросто iCloud медленный.
 hyouuu04 мар. 2014 г., 01:44
Спасибо, что поделились своим PersistentStack! Я'Я использовал его, но некоторые пользователи сообщают о потерянных данных после обновления приложения - есть идеи?
 Rafael Bugajewski20 янв. 2016 г., 09:32
Вещи все еще неЭто так радужно, как подсказывает ответ. Мы используем стек iCloud + Core Data с момента его появления, а также прошли через всеВнутренние итерации для улучшения стека. Пока этоверно, что текущий стек работает намного лучше, чем старый, у нас все еще есть неустранимые проблемы, которые мы обнаружили во время бета-тестов за последние пару недель (в основном наихудший случай: потеря пользовательских данных).
 Abras29 нояб. 2013 г., 15:13
@mluisbrown Я думаю, что Apple хотела, чтобы это было автоматически. Ошибка в том, что это неэто случается все время. Я знаю, что должен обнаруживать и удалять дубликаты, но нет способа узнать, когда iCloud автоматически их перенесет. Таким образом, нет способа определить, когда появляются дубликаты. Мой единственный вариант - проверять каждый новый запуск, но это все равно оставит пользователя с дублированными записями на некоторое время. Не сказать, что в большинстве случаев после миграции iCloud начинает выдавать много разных ошибок.
 Bright Lee23 окт. 2013 г., 03:51
Можете ли вы рассказать о личном опыте в это время?
 erdekhayser20 нояб. 2013 г., 03:47
@mluisbrown Я вижу, что не так. Мое приложение теперь использует файлы SQLite, возможно, из-за разницы между вашей основной реализацией данных и моей. Лучше посмотри на это раньше, чем позже.
 Alexander of Norway30 окт. 2013 г., 22:35
@mluisbrown и работает в кратчайшие сроки. Большое спасибо! Суть была проста в реализации, но почему внешнему хранилищу требуется так много времени после переустановки? Есть ли способ это исправить?

Ваш ответ на вопрос