2017-02-22 7 views
0

Проблема:Несовместимое хранилище CoreData всегда вызывает сбои?

Недавно мы ввели CoreData в наше приложение, и ранее выпустила версию с неполной модели CoreData. В этой отгруженной версии мы никогда не реализовали код для записи данных в базу данных sqlite, только модель была реализована.

В нашем внутреннем тестировании мы вернем наши устройства к ранее отгруженной неполной модели, а затем обновим ее до новой модели и никогда не должны были выполнять миграцию, а также не сталкивались с несовместимым исключением магазина.

Однако в нашем бета-тестировании мы выявили существующих пользователей, которые испытывают сбои из-за несовместимого хранилища, в то время как у некоторых существующих пользователей нет.

Вопрос:

ли несовместимый магазин всегда вызывает сбой, и если да, то почему бы нам не испытывать сбой при обновлении к другой модели CoreData от старой версии?

Следует отметить, что когда мы вносим изменения в самую последнюю модель CoreData, мы получаем брошенные несовместимые ошибки в хранилищах, но когда мы возвращаемся к очень примитивной версии нашей основной модели данных, мы не видим этого выброшенного исключения.

+0

, когда вы вносите какие-либо изменения в coredata, тогда вам нужно удалить старую сборку и использовать новую сборку, если u по-прежнему использует старую сборку, чтобы она привела к сбою. –

+0

взгляните на: https://www.raywenderlich.com/27657/how-to-perform-a-lightweight-core-data-migration – raki

+0

Если вы удалите приложение своего устройства перед установкой, то его нет Конфликты схемы CoreData не приводят к сбою. Если ваши тестовые пользователи не удалили приложение с своего устройства, прежде чем использовать новую версию приложения, которая имеет другую схему CoreData, конфликт в схеме приведет к сбою. – Zhang

ответ

0

Чтобы ответить на ваш вопрос, если у вас есть следующие строки кода, который называется в проекте

[__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType 
                configuration:nil 
                   URL:storeURL 
                  options:nil 
                  error:&error]) 

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

Легкая миграция довольно проста и прямолинейна, но вы должны соблюдать некоторые правила. Для легкой миграции изменить указанную выше строку кода:

[__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType 
                 configuration:nil 
                    URL:storeURL 
                   options:@{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES} 
                   error:&error]) 

Вы можете проверить больше о легкой миграции на developer.apple

Также следует проверить ссылку, отправленный @raki в комментариях.

+0

Спасибо, danypata. Оглядываясь назад на нашу сборку неполных данных ядра, у нас есть код, который объявляет постоянный координатор хранилища, но он никогда не вызывается. По этой причине мы видим только крах для некоторых пользователей, но не всех? Наш план действий - полностью удалить постоянное хранилище (если оно несовместимо), затем создать новый и загрузить данные с наших серверов, поскольку миграция, вероятно, будет тяжелой. Мы уже синхронизируем локальные данные с нашими внешними серверами, поэтому код подключается и воспроизводится. Мысли об этом подходе? –

+0

Я не знаю, почему он сбой, если код никогда не вызывается, это означает, что основные данные не настроены вообще, авария может быть из других мест.Что касается воссоздания постоянного хранилища, на мой взгляд, если вы не используете основные отношения данных (один-ко-многим, многие-ко-многим), я бы пошел на прямой кеш в файлы, так как вы синхронизируете все данные с помощью ваших серверов. Также гораздо лучшей альтернативой основным данным является Realm (проверьте его), и это невероятно быстро, но, как и основные данные, которые вы должны обрабатывать миграции, на самом деле я не думаю, что есть метод кеша, который не запрашивает какой-либо миграции. – danypata

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