Как удалить все объекты из моего постоянного хранилища в 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 который заменяет текущую базу данных на выбранную.

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

  • Добавить библиотеку FFMPEG в iOS
  • Youtube ID видео с URL - цель C
  • Отступ текста в UITextField
  • Какова высота UITabBar на iOS 8, iOS 9, iOS 10 и iOS 11?
  • что происходит с данными nsuserdefault, если телефон умирает до синхронизации
  • Можно ли создать динамическую сетку с использованием iOS AutoLayout?
  • Метод windowScriptObject не найден в коде Objective-C
  • Индивидуальные частицы и физика в наборе Sprite
  • Символизирующие журналы сбоев в XCode 4.3.2
  • Один UIViewcontroller, как переключаться между несколькими xibs?
  • Как предотвратить множественное событие на том же UIButton в iOS?
  • Interesting Posts

    Как добавить аннотацию @noescape к необязательному закрытию

    относительно искаженной кнопки возврата в приложении iOS с помощью UINavigationController

    Каков стандартный шрифт и размер для заголовка навигации iPhone?

    Могу ли я использовать PAN через Bluetooth для подключения аксессуара к iPad?

    Как сделать камеру следующей SKNode в комплекте Sprite?

    Границы ячеек таблицы становятся видимыми при выборе ячейки в UITableView в IOS

    Предварительная загрузка данных в UISearchController при выборе SearchBar

    Сбой шкалы iOS8 при вызове drawViewHierarchyInRect afterScreenUpdates: ДА

    Вибрация iPhone 6S вручную, как заглянуть и поп?

    UIWebView автоматически отключает масштабирование

    Проверьте, является ли число десятичным с быстрым

    Как создать NSMutableArray и назначить для него определенный объект?

    Xcode 9, выбранный тип фрагмента кода удаляется при нажатии клавиши ввода

    Эффект от смешивания большого квадрата

    получить отправителя segue в контроллере вида назначения

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