Удаление хранилища CoreData в OS X?

#xcode #macos #core-data #max

#xcode #macos #core-данные #макс

Вопрос:

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

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

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

Спасибо.

Ответ №1:

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

Комментарии:

1. хм, похоже, моего приложения здесь нет. где-нибудь еще я мог бы посмотреть?

2. @binnyb Вам нужно найти код, который создает хранилище. Это создаст путь, по которому он хранит файл.

3. Я нашел это. это было в корневом каталоге (/ Library / Application Support), а не в домашнем

4. Если ваше приложение находится в режиме разработки, оно будет использовать ваш идентификатор пакета, например $ {HOME}/Library /Application Support/com.yourcompany.yourproduct/

Ответ №2:

В OS X 10.7 Lion, когда приложение изолировано, оно сохраняется в:

 ~/Library/Containers/com.yourcompany.yourAppName/
  

Ответ №3:

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

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

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

Ответ №4:

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

В этой переменной 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")
}
  

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

Ответ №5:

В macOS Big Sur (11.4) локальное хранилище данных NSPersistentCloudKitContainer Core можно найти по адресу:

~/Library/Containers/YourAppName/Данные /CloudKit/

Ответ №6:

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

Product > Clean или ShiftK

Ответ №7:

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

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

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

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

чтобы удалить данные вашего приложения.

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