Ответ 1
Или, если вы находитесь в режиме dev, вы также можете просто удалить приложение и запустить его снова.
У меня были основные данные 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;
};
Или, если вы находитесь в режиме dev, вы также можете просто удалить приложение и запустить его снова.
Удаление приложения иногда бывает не так! Предложите, ваше приложение уже опубликовано! Вы не можете просто добавить новый объект в базу данных и продолжить - вам нужно выполнить миграцию!
Для тех, кто не хочет вникать в документацию и ищет быстрое исправление:
Откройте файл .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, если вы указали значение по умолчанию. Добавить или удалить объект. Переименуйте свойство. Переименуйте сущность.
Ответ заимствован из Стас
Если это непроизводственное приложение, просто удалите свою локальную базу данных (appname.sqlite) и перезапустите приложение.
Я считаю, что я всегда это делаю и поэтому предоставляю следующие дополнительные детали:
В разделе XCode 4 (4.3.2) вы должны найти свое хранилище данных:
/Пользователи/~/Library/Поддержка приложений /iPhone Simulator/simulatorVersion/Applications/yourAppIdentifier/Documents
Или вы можете использовать Spotlight, если сначала включить поиск системных файлов; Я нашел его наиболее быстрым, чтобы сохранить такой поиск в строке меню.
Если это непроизводственное приложение, просто удалите свою локальную базу данных (appname.sqlite) и перезапустите приложение.
Удалите приложение на симуляторе и перезапустите:
В симуляторе перейдите на страницу Hardware → Home:
Нажмите и удерживайте кнопку мыши на значке приложения:
Нажмите "X" на значок приложения, чтобы удалить:
Вернитесь к Xcode и перезапустите приложение (Command + R):
или:
PS.: Если ошибка появляется снова, просмотрите свой код, потому что проблема должна быть в синтаксисе или несоответствии между тем, что вы хотите перечислить, с вашей моделью данных.
Я столкнулся с той же проблемой, используя Xcode 7 beta 1, и следующее решение решило проблему. Меню == → нажмите "Окно" > "Проекты" > выберите проект с левой стороны и нажмите кнопку "Удалить", расположенную с правой стороны. Если все еще не работает, = > reset симулятор и запустите приложение
Reset ваш симулятор и снова запустите. Если бы вам пришлось работать с другим устройством в симуляторе, это сработало бы. Если вы работаете с симулятором iphone 6s и пытаетесь запустить 6 с плюс, он все равно будет работать без перезагрузки.
При работе на телефоне обязательно удалите приложение и повторите его.