Что делать при получении "Модель, используемая для открытия магазина, несовместима с моделью, используемой для создания магазина"?

У меня были основные данные EntityDescription и я создал данные в нем. Затем я изменил EntityDescription, добавил новый, удалил старый, используя редактор для xcdatamodeld файл.

Теперь любой мой код для основных данных вызывает эту ошибку "The model used to open the store is incompatible with the one used to create the store}", Подробности ниже. Что я должен делать? Я предпочитаю удалить все в модели данных и перезапустить новую.

Спасибо за любое предложение!

 reason=The model used to open the store is incompatible with the one used to create the store}, {
    metadata =     {
        NSPersistenceFrameworkVersion = 320;
        NSStoreModelVersionHashes =         {
            Promotion = <472663da d6da8cb6 ed22de03 eca7d7f4 9f692d88 a0f273b7 8db38989 0d34ba35>;
        };
        NSStoreModelVersionHashesVersion = 3;
        NSStoreModelVersionIdentifiers =         (
        );
        NSStoreType = SQLite;
        NSStoreUUID = "9D6F4C7E-53E2-476A-9829-5024691CED03";
        "_NSAutoVacuumLevel" = 2;
    };

7 ответов

Решение

Или, если вы находитесь в режиме разработки, вы также можете просто удалить приложение и запустить его снова.

Удаление приложения иногда не так! Предложите, ваше приложение уже опубликовано! Вы не можете просто добавить новый объект в базу данных и продолжить - вам нужно выполнить миграцию!

Для тех, кто не хочет копаться в документации и ищет быстрое решение:

Откройте ваш файл.xcdatamodeld

нажмите на редактор

выберите Добавить версию модели...

Добавьте новую версию вашей модели (добавлена ​​новая группа моделей данных)

выберите основной файл, откройте инспектор файлов (правая панель) и в разделе "Модель данных базового уровня" выберите новую версию модели данных для текущей модели данных.

Это не все) Вы должны выполнить так называемую "легкую миграцию".

Перейдите к вашему AppDelegate и найдите, где создается persistentStoreCoordinator.

Найти эту строку if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])

Заменить ноль вариантов на @{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES} (actually provided in the commented code in that method)

Вот, пожалуйста, веселитесь! PS Это касается только облегченной миграции. Чтобы ваша миграция квалифицировалась как легкая миграция, ваши изменения должны быть ограничены этой узкой полосой:

Добавить или удалить свойство (атрибут или отношение). Сделать необязательное свойство необязательным. Сделайте необязательный атрибут необязательным, если вы укажете значение по умолчанию. Добавить или удалить объект. Переименовать собственность. Переименуйте объект.

Ответ заимствован у Стаса

Если это непроизводственное приложение, просто удалите локальную базу данных (appname.sqlite) и перезапустите приложение.

Я нахожу, что всегда делаю это, и поэтому предоставляю следующую дополнительную информацию:

В XCode 4 (4.3.2) вы должны найти свое хранилище данных здесь:

/ Пользователи /~/ Библиотека / Поддержка приложений /iPhone Simulator/simulatorVersion/ Приложения / yourAppIdentifier/ Документы

Или вы можете использовать Spotlight, если сначала включите поиск системных файлов; Я нашел самый быстрый способ сохранить такой поиск в строке меню.

Если это непроизводственное приложение, просто удалите локальную базу данных (appname.sqlite) и перезапустите приложение.

Удалите приложение на симуляторе и перезапустите:

На симуляторе зайдите в Hardware -> Home: введите описание изображения здесь

Нажмите и удерживайте кнопку мыши на значке вашего приложения: введите описание изображения здесь

Нажмите "X" на значке приложения, чтобы удалить:
введите описание изображения здесь

Вернитесь в Xcode и перезапустите ваше приложение (Command+R):
введите описание изображения здесь
или же:
введите описание изображения здесь

PS: Если ошибка появляется снова, проверьте ваш код, потому что проблема должна заключаться в синтаксисе или несоответствии между тем, что вы хотите перечислить с имеющейся у вас моделью данных.

Перезагрузите симулятор и запустите снова. Если бы вы работали с другим устройством в симуляторе, это работало бы. Если вы работаете с симулятором iphone 6s и пытаетесь запустить 6s plus, он все равно будет работать без сброса настроек.

При работе на телефоне обязательно удалите приложение и запустите его снова.

Открыть раскрывающийся список симуляторов

Я столкнулся с той же проблемой, используя Xcode 7 beta 1, и следующее действие решило проблему. Menu==>> нажмите Window>Projects> выберите проект слева и нажмите кнопку удаления, которая находится справа. Если по-прежнему не работает, => сбросить симулятор и запустить приложение

Другие вопросы по тегам