#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
или Shift⌘K
Ответ №7:
Попробуйте запустить приложение в симуляторе другого устройства, которым вы раньше не пользовались, и посмотрите, поможет ли это вам (например, iPhone SE вместо iPhone 7). Если это произойдет, то удаление поврежденных папок должно помочь. Откройте терминал и выполните следующие команды:
sudo rm -rf ~/Library/Developer/CoreSimulator/Devices
чтобы удалить данные симуляторов, которые могут быть повреждены,
sudo rm -rf ~/Library/Developer/XCode/DerivedData/
чтобы удалить данные вашего приложения.
Надеюсь, это поможет!