Я создал модель базовых данных в xcode 3.2 и после обновления в Xcode 4.2 я добавил новую сущность подкласса NSManagedObject (см. Новую сущность).
Во-первых, это выглядит странно, потому что он не в той же группе, что и старая. Вот изображение на моем xcode 4.2 (AlkitabDB - это то, что я создал в xcode 3.2, EndeDB - новое из текущей версии xcode (4.2):
Во-вторых, я оставил все как есть, затем я получил доступ ко второй сущности (новой) так же, как и к первой сущности (старой), и появляется ошибка с названием.
Вот ошибка:
2012-01-16 21:13:38.496 iHuria[55953:207] Unresolved error Error Domain=NSCocoaErrorDomain Code=134100 "The operation couldn’t be completed. (Cocoa error 134100.)" UserInfo=0x8829cd0 {metadata=<CFBasicHash 0x882a370 [0x1839b38]>{type = immutable dict, count = 7,
entries =>
2 : <CFString 0x8829b90 [0x1839b38]>{contents = "NSStoreModelVersionIdentifiers"} = <CFArray 0x8829ff0 [0x1839b38]>{type = immutable, count = 0, values = ()}
4 : <CFString 0x8829bc0 [0x1839b38]>{contents = "NSPersistenceFrameworkVersion"} = <CFNumber 0x8829770 [0x1839b38]>{value = +320, type = kCFNumberSInt64Type}
6 : <CFString 0x8829bf0 [0x1839b38]>{contents = "NSStoreModelVersionHashes"} = <CFBasicHash 0x882a080 [0x1839b38]>{type = immutable dict, count = 1,
entries =>
0 : <CFString 0x882a010 [0x1839b38]>{contents = "AlkitabDB"} = <CFData 0x882a030 [0x1839b38]>{length = 32, capacity = 32, bytes = 0xd02ac5f8be6ab0b39add450aca202ac0 ... 3d45d462998d2ccd}
}
7 : <CFString 0x10e3aa8 [0x1839b38]>{contents = "NSStoreUUID"} = <CFString 0x8829e60 [0x1839b38]>{contents = "4F2EE7FF-463B-4055-BBED-8E603CDBDF59"}
8 : <CFString 0x10e3948 [0x1839b38]>{contents = "NSStoreType"} = <CFString 0x10e3958 [0x1839b38]>{contents = "SQLite"}
9 : <CFString 0x8829c40 [0x1839b38]>{contents = "NSStoreModelVersionHashesVersion"} = <CFNumber 0x6b1c7c0 [0x1839b38]>{value = +3, type = kCFNumberSInt32Type}
10 : <CFString 0x8829c70 [0x1839b38]>{contents = "_NSAutoVacuumLevel"} = <CFString 0x882a0c0 [0x1839b38]>{contents = "2"}
}
, reason=The model used to open the store is incompatible with the one used to create the store}, {
metadata = {
NSPersistenceFrameworkVersion = 320;
NSStoreModelVersionHashes = {
AlkitabDB = <d02ac5f8 be6ab0b3 9add450a ca202ac0 ebd1e860 cbb578c2 3d45d462 998d2ccd>;
};
NSStoreModelVersionHashesVersion = 3;
NSStoreModelVersionIdentifiers = (
);
NSStoreType = SQLite;
NSStoreUUID = "4F2EE7FF-463B-4055-BBED-8E603CDBDF59";
"_NSAutoVacuumLevel" = 2;
};
reason = "The model used to open the store is incompatible with the one used to create the store";
}
Я искал решение раньше и обнаружил, что я должен удалить приложение из симулятора и повторно запустить приложение, и оно не работает. Кто-нибудь знает решение этой проблемы? Пожалуйста помоги.
let options = [ NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption:true ]
Удалите приложение из симулятора и выполните очистку вашего проекта. Это должно прояснить эти проблемы. Убедитесь, что вы не работаете в отладчике при удалении приложения, иначе оно на самом деле не удалится должным образом.
Если вы хотите быть уверенным, что он исчез, проверьте этот каталог на
Users/INSERT_YOUR_USER_HERE/Library/Application Support/iPhone Simulator/
наличие папки вашего приложения в версии, которую вы используете.Примечание: это только для разработки. Для производства вам нужно реализовать какую-то миграцию. Google "Core Data Migration", с упрощенной миграцией, являющейся самой простой.
источник
Просто добавьте атрибут Options при создании persistentStoreCoordinator в файле AppDelegate.m для метода основных данных, как показано ниже
Objective-C
СВИФТ
Это решило мою проблему ..
источник
Ответ: Удалить приложение из симулятора, выполнить очистку и перестроить свой проект.
Примечание. Всякий раз, когда вы вносите изменения в определение базовых данных, удалите приложение, установленное на физическом устройстве или в симуляторе, очистите проект и заново выполните сборку.
источник
Да. После того, как вы удалите приложение на физическом устройстве и восстановите его, оно заработает.
источник
Для быстрого, в AppDelegate.swift найдите строку
и заменить его на
источник
Я просто потратил несколько дней на борьбу с этой ошибкой, а также на сбой mergedModelFromBundles и ошибку «Не удается объединить модели с двумя разными объектами с именем *».
Оказывается, основная проблема заключалась в том, что XCode не удаляет старые ресурсы с устройств, и у меня были старые версии моей модели данных (файлы .mom), которые вызывали конфликты. Вот почему удаление приложения устранило проблему на одном из моих устройств.
После нахождения этого поста в другом ответе SO я сделал свое приложение более терпимым к старым моделям, изменив эту строку, которая ищет ВСЕ файлы .mom:
на это, который смотрит только в каталоге Filters:
Я использовал recursivePathsForResourcesOfType из этого вопроса, чтобы выяснить это путем регистрации всех файлов .mom в приложении:
Я также использовал iExplorer для просмотра посторонних файлов .mom (пока не пытался их удалить).
Метод ниже был также полезен. Он показал, что сущность была в объединенной модели, возвращенной [psc managedObjectModel], которой больше не существует ни в одной из моих моделей или в самом магазине. Это было то, что позволило мне полагать, что старая модель кэшировалась на самом устройстве, которое чистое здание не удаляло. Метод регистрирует каждый объект, который является таким же, был изменен или добавлен или удален из модели. (написано с таким ответом SO в качестве отправной точки):
использование: вызывается перед добавлением каждого хранилища в NSPersistentStoreCoordinator:
источник
Каждый раз, когда вы вносите изменения в определение базовой даты, вы должны удалять приложения, установленные на физическом устройстве или симуляторе.
источник
Product
->Clean
источник
Самое простое решение, которое работало для меня в Swift 2.1, Xcode 7:
Удалить приложение из симулятора (Cmd + Shift + H, чтобы перейти на главный экран. Нажмите и удерживайте приложение, нажмите крестик, как обычно, чтобы удалить приложение с телефона)
Cmd + Shift + H снова, чтобы остановить танцы приложений
Вернитесь к своему проекту и повторите
У меня была эта проблема при записи / чтении из Core Data с двумя настроенными объектами. Удаление приложения и повторный запуск программы устранили проблему
источник
Я просто удалил
[Simulator App Folder]/Document/*.sqlite
файл после внесения изменений в сущности, и это сработало. И, конечно же, файл .sqlite содержит все сохраненные данные и структуры, которые будут потеряны.источник
Пожалуйста, удалите приложение из симулятора, очистите код и запустите .it работает нормально. Это может помочь вам.
источник
Если вы используете Swift.
Следуйте ответу @Stas и вставьте параметры вместо nil в ваш делегат приложения:
источник
Попробуйте «Сбросить содержимое и настройки» в симуляторе. Сработало у меня после удаления приложения и Чистой сборки
источник
У меня возникла та же проблема с моим приложением (еще не выпущенным в App Store).
Вот как я это исправил:
(3) был шаг, который наконец заставил это бежать должным образом. Надеюсь это поможет!
источник
Хотя иногда вы можете просто удалить приложение с устройства при изменении схемы в модели управляемых объектов, в некоторых случаях это невозможно, например, потому что вы уже опубликовали свое приложение со старой схемой.
Если это так, вы должны позаботиться о переносе старых данных в новую схему:
Управление версиями базовой модели данных и миграция данных
источник
Вам нужно будет перенести модель Core Data с помощью миграции. Каждый раз, когда вы меняете модель, вы делаете ее несовместимой без контроля версий. Пристегнитесь, это немного волосатая тема.
http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/CoreDataVersioning/Articles/Introduction.html
источник
Если вы вносите изменения в модель Core Data, вы должны предоставить политику миграции, которая сообщает Core Data, как перенести существующие постоянные объекты (созданные пользователями с текущей выпущенной версией) в новую модель.
Для некоторых сценариев Core Data может автоматически выводить отображение из старой модели в новую. Для более сложных изменений вам может понадобиться реализовать некоторую логику, которая выполняет миграцию.
Подробности можно найти в Руководстве по программированию версий базовой модели данных и миграции данных .
Обновление
Этот ответ здесь о переполнении стека охватывает основы упрощенной миграции Core Data, а также содержит некоторый код для начала работы.
источник
Эта проблема обычно возникает из-за несовместимости версии, в которой была создана БД . Общий подход к этой проблеме - удалить приложение и переустановить его. Но в упомянутом вами случае версия БД полностью отличается на Xcode 3.2 и 4.2. Так что лучше использовать ту же версию Xcode для БД.
источник
Во-первых, в
xcdatamodeld
комплекте должны быть толькоxcdatamodel
файлы. Ваши подклассы НЕ должны быть вxcdatamodeld
. Переместите их оттуда. Есть большая вероятность, что они путают компилятор.Во-вторых, ошибка указывает на то, что Core Data не может найти вашу модель. Вы создали данные и затем коснулись модели? Если это так, вы находитесь в несовместимом состоянии и должны исправить это, либо удалив данные (что предложил Филипп), либо изменив модель НАЗАД .
источник
xcdatamodel
файлом, должна быть там. Это файлы .h и .m, которые необходимо переместить. Используйте Finder.Я получаю ошибку, но причина, по которой я ее получаю, заключается в следующем.
Первоначально у меня был один объект с именем «Entry», и в базе данных была сохранена одна строка для этого объекта. Затем я добавил еще одну сущность с именем «Person» и после добавления пошел в сборку и получил ошибку. Поэтому я решил проблему, удалив сущность «Персона», а затем собрав приложение, удалив строку, находящуюся в «Записи», а затем закрыл приложение. Затем я полностью удалил приложение с телефона, а затем сделал восстановление, и оно работало нормально. Не уверен, какой шаг исправил проблему (удаление строки или приложения), но, надеюсь, если вы ищете решение, это поможет. :)
Редактировать: Да, и если вы беспокоитесь об удалении вашей новой сущности (в моем случае «Персона») для повторной сборки приложения, помните, что вы можете получить ее позже, используя CMD + Z!
источник
У меня была эта проблема - я сначала перезагружаю симулятор, а затем очищаю проект и перестраиваю. И тогда это работает.
источник
При изменении основных данных (добавление поля в таблицу, удаление поля и т. Д.) Файл sqlite в папке документов приложений должен синхронизироваться с вашей схемой.
Этот файл не перезаписывается по умолчанию, этот файл необходимо восстановить.
Следуй этим шагам:
Перейдите в папку, указанную NSURL. (Этот путь можно найти в сообщении об исключении, сгенерированном приложением перед сбоем.) Пример: / Пользователи // Библиотека / Поддержка приложений / iPhone Simulator // Приложения // Документы
удалить или переименовать файл sqlite
Это обеспечит синхронизацию схемы и Xcode.
источник
Для разработки приложений Mac:
Это сработало для меня, надеюсь, это могло бы быть полезным.
источник
iOS Simulator -> Сбросить содержимое и настройки ...
Работал для меня
Симулятор iOS -> Сбросить содержимое и настройки ... -> Сброс Работает также на iOS9 (xcode 7.1)
источник