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

У меня были основные данные 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;
    };

Ответ 1

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

Ответ 2

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

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

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

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

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

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

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

ЧТО НЕ ВСЕ) Вы должны выполнить так называемую "легкую миграцию".

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

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

Замените параметры nil на @{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES} (actually provided in the commented code in that method)

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

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

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

Ответ 3

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

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

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

/Пользователи/~/Library/Поддержка приложений /iPhone Simulator/simulatorVersion/Applications/yourAppIdentifier/Documents

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

Ответ 4

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

Ответ 5

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

В симуляторе перейдите на страницу Hardware → Home: введите описание изображения здесь

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

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

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

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

Ответ 6

Я столкнулся с той же проблемой, используя Xcode 7 beta 1, и следующее решение решило проблему. Меню == → нажмите "Окно" > "Проекты" > выберите проект с левой стороны и нажмите кнопку "Удалить", расположенную с правой стороны. Если все еще не работает, = > reset симулятор и запустите приложение

Ответ 7

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

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

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