Как удалить все объекты из моего постоянного хранилища в Core Data?

У меня есть Core Data, работающих в моем приложении. Итак, я извлекаю XML-файл, анализирую данные в объектах модели и вставляю их в основные данные. Они сохраняются в постоянном хранилище, и я могу получить к ним доступ, когда я перезапущу приложение. Тем не менее, я хочу, чтобы иметь возможность обновлять данные в постоянном хранилище по своему усмотрению, поэтому мне нужно сначала удалить существующие объекты из магазина. Есть ли прямой метод для этого?

благодаря


Я нашел это решение:

[managedObjectContext lock]; [managedObjectContext reset];//to drop pending changes if ([persistentStoreCoordinator removePersistentStore:persistentStore error:&error]) { NSURL* storeURL = [NSURL fileURLWithPath:[self pathForPersistentStore]]; [[NSFileManager defaultManager] removeFileAtPath:[storeURL path] handler:nil]; [self addPersistentStore];//recreates the persistent store } [managedObjectContext unlock]; 

Вот что я сделал, чтобы полностью очистить Core Data. Он работает отлично. Это если у вас есть только один постоянный магазин, который, вероятно, будет иметь место, если вы не добавили еще одного вручную. Если у вашего управляемогоObjectContext есть то же имя, что и здесь, вы можете просто копировать / прошнуть, он будет работать.

 NSError * error; // retrieve the store URL NSURL * storeURL = [[managedObjectContext persistentStoreCoordinator] URLForPersistentStore:[[[managedObjectContext persistentStoreCoordinator] persistentStores] lastObject]]; // lock the current context [managedObjectContext lock]; [managedObjectContext reset];//to drop pending changes //delete the store from the current managedObjectContext if ([[managedObjectContext persistentStoreCoordinator] removePersistentStore:[[[managedObjectContext persistentStoreCoordinator] persistentStores] lastObject] error:&error]) { // remove the file containing the data [[NSFileManager defaultManager] removeItemAtURL:storeURL error:&error]; //recreate the store like in the appDelegate method [[managedObjectContext persistentStoreCoordinator] addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error];//recreates the persistent store } [managedObjectContext unlock]; //that's it ! 

быстрая версия @Nicolas Manzini ответ:

 if let psc = self.managedObjectContext?.persistentStoreCoordinator{ if let store = psc.persistentStores.last as? NSPersistentStore{ let storeUrl = psc.URLForPersistentStore(store) self.managedObjectContext?.performBlockAndWait(){ self.managedObjectContext?.reset() var error:NSError? if psc.removePersistentStore(store, error: &error){ NSFileManager.defaultManager().removeItemAtURL(storeUrl, error: &error) psc.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: storeUrl, options: nil, error: &error) } } } } 

Основываясь на ответе @Nicolas Manzini, я написал версию Swift 2.1 с небольшими улучшениями. Я добавил расширение для NSManagedObjectContext . Полный код ниже:

 import Foundation import CoreData extension NSManagedObjectContext { func deleteAllData() { guard let persistentStore = persistentStoreCoordinator?.persistentStores.last else { return } guard let url = persistentStoreCoordinator?.URLForPersistentStore(persistentStore) else { return } performBlockAndWait { () -> Void in self.reset() do { try self.persistentStoreCoordinator?.removePersistentStore(persistentStore) try NSFileManager.defaultManager().removeItemAtURL(url) try self.persistentStoreCoordinator?.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil) } catch { /*dealing with errors up to the usage*/ } } } } 

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

 [managedObjectContext deleteObject:someObject]; 

Если вы хотите удалить все объекты, возможно, быстрее всего удалить хранилище, а затем воссоздать стек CoreData.

Извлеките свой файл данных и переделайте его.

Существует функция

введите описание изображения здесь

Согласно WWDC 242 , вы можете использовать его для очистки базы данных.

Также есть func replacePersistentStore который заменяет текущую базу данных на выбранную.

Самый быстрый способ отбросить все – отправить сообщение об обновленном объекте.

  • Я хочу оживить, на самом деле исчезать, «внутри» drawRect
  • Как построить свойство по родовому типу в Swift?
  • iPhone SDK - Матовое стекло (iOS 7 Blur) Эффект
  • Захват экрана iPhone для просмотра
  • Таймер GCD никогда не срабатывает
  • как изменить текст кнопки удаления в UITableCell на событие свопинга
  • UITableViewCell: разрешение выборочного удаления
  • Изменения цвета клавиатуры iOS - keyboardAppearance темный цвет не прилипает
  • iOS10 WKWebview - оценкаJavaScript ("document.height") return nil
  • В чем преимущество использования статической NSString для CellIdentifier?
  • Образы процесса SDWebImage перед кешированием
  • Interesting Posts

    Разница между LLDB и отладчиками GDB

    как создать сильное красное свечение на UILabel

    Как получить кешированные ответы, используя Alamofire, когда приложение находится в автономном режиме?

    Parse.com Возможно ли войти в систему с помощью facebook, проверяя, существует ли у пользователя пользовательское письмо пользователя в синтаксическом анализе, и если он связывает оба?

    Подкласс IOS 5 UIDocument обратно совместим?

    Devise: iOS "Добавить на главный экран"

    Каков правильный способ отправки большого файла через HTTP POST, без загрузки всего файла в ram?

    Тестирование модуля в Xcode, запускает ли это приложение?

    Преобразование String на сегодняшний день Цель-C

    Извлечение последнего слова в строке со скоростью

    Подключить UITableView DataSource / Delegate к базовому классу UIViewController

    метод sendSendRequestForAuthenticationChallenge называется рекурсивным

    Шаблон пользовательских уведомлений с Ionic

    Pod от github не работает

    черный фон при переопределении drawRect в UIScrollView

    Давайте будем гением компьютера.