Удаление хранилища CoreData в OS X? - PullRequest
17 голосов
/ 10 мая 2011

Я играю с CoreData в приложении Mac OS X. После изменения сущности я получил следующую ошибку:

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

Все ответы, которые я нашел для этой проблемы, предполагают внедрение контроля версий / миграции в приложение, но я не заинтересован в сохранении моих данных. Нет ли для этого менее сложного решения? Как удаление файла со склада или что-то подобное? И если да, где находится этот файл?

Спасибо.

Ответы [ 6 ]

21 голосов
/ 10 мая 2011

Если вам не нужны данные, тогда да, вы можете просто удалить старый файл и создать новый.Если ваши данные основаны на документе, то сам документ должен быть удален.Если вы используете единое хранилище для всего приложения (не на основе документов), то вам следует поискать код в коде, который создает объект хранилища.Шаблон помещает код создания в делегат приложения, а местоположение по умолчанию для хранилища - ${HOME}/Library/Application Support/${APP_NAME}/.

5 голосов
/ 30 июня 2012

В OS X 10.7 Lion, когда приложение помещено в «песочницу», оно хранится в:

~/Library/Containers/com.yourcompany.yourAppName/
3 голосов
/ 09 марта 2013

Я обнаружил, что для Mac OS X 10.8 / Xcode 4.6 данные хранятся в папке производных данных в папке

Users/*username*/Library/Developer/Xcode/DerivedData/*app name*-*random string*/Build/Products/Debug/*app name*.sqlite

Самый простой способ удалить эти данные - перейти в органайзер, выбрать вкладку проекта и нажать кнопку «Удалить ...» по производным данным.

2 голосов
/ 24 апреля 2016

В качестве альтернативы, для OSX используйте Nsfilemanager, чтобы удалить файл, используя URL, определенный в lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator{...}

В этом var persistentStoreCoordinator будет определен URL, предназначенный для использования persistentStoreCoordinator. Вы можете просто использовать определенный там URL, чтобы удалить старое хранилище. Вставьте приведенный ниже код. Запустите проект, и файл будет удален. Затем удалите код, чтобы разрешить повторное сохранение объектов и не удаляйте данные каждый раз.

вот что я нашел в lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator

let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("CocoaAppCD.storedata")

вот что я положил сразу под ним.

do{
    try NSFileManager.defaultManager().removeItemAtURL(url)
} catch{
    print("could not delete file")
}

затем я нажал кнопку "запустить" Он запускался один раз, затем я удаляю только что созданный код, чтобы данные не удалялись каждый раз

0 голосов
/ 11 мая 2017

Попробуйте запустить приложение в симуляторе другого устройства , которое вы ранее не использовали, и посмотрите, поможет ли оно вам (например, iPhone SE вместо iPhone 7).Если это произойдет, то удаление поврежденных папок должно помочь. Откройте Терминал и выполните следующие команды:

sudo rm -rf ~/Library/Developer/CoreSimulator/Devices

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

sudo rm -rf ~/Library/Developer/XCode/DerivedData/

для удаления данных вашего приложения.

Надеюсь, это поможет!

0 голосов
/ 01 апреля 2016

В Mac OS X 10.11.4 с очисткой Xcode 7.3 исправлена ​​проблема для меня:

Product> Clean или Shift K

...