Удалить / Сбросить все записи в Базовых данных?

Знаете ли вы какой-либо способ удалить все записи, хранящиеся в основных данных? Моя схема должна остаться прежней; Я просто хочу сбросить его до пустого.


редактировать

Я хочу сделать это программно, чтобы пользователь мог по существу ударить reset кнопка.

29 ответов

iOS 10 и Swift 3

Предполагая, что ваше имя сущности "Photo" и вы создаете класс CoreDataStack...

 func clearData() {
        do {            
            let context = CoreDataStack.sharedInstance.persistentContainer.viewContext
            let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Photo")
            do {
                let objects  = try context.fetch(fetchRequest) as? [NSManagedObject]
                _ = objects.map{$0.map{context.delete($0)}}
                CoreDataStack.sharedInstance.saveContext()
            } catch let error {
                print("ERROR DELETING : \(error)")
            }
        }
    }

Вот хороший учебник о том, как использовать CoreData и как использовать этот метод. https://medium.com/compileswift/parsing-json-response-and-save-it-in-coredata-step-by-step-fb58fc6ce16f

Предполагая, что вы используете MagicalRecord и иметь постоянное хранилище по умолчанию:

Мне не нравятся все решения, которые предполагают существование определенных файлов и / или требуют ввода имен или классов сущностей. Это Swift(2), безопасный способ удалить все данные из всех сущностей. После удаления он также создаст новый стек (я на самом деле не уверен, насколько необходима эта часть).

Это идеальное решение для ситуаций, связанных с выходом из системы, когда вы хотите удалить все, но у вас есть работающее хранилище и moc для ввода новых данных (когда пользователь входит в систему...)

extension NSManagedObject {

    class func dropAllData() {

        MagicalRecord.saveWithBlock({ context in

            for name in NSManagedObjectModel.MR_defaultManagedObjectModel().entitiesByName.keys {
                do { try self.deleteAll(name, context: context) }
                catch { print("⚠️ ✏️ Error when deleting \(name): \(error)") }
            }

            }) { done, err in
                MagicalRecord.cleanUp()
                MagicalRecord.setupCoreDataStackWithStoreNamed("myStoreName")
        }
    }

    private class func deleteAll(name: String, context ctx: NSManagedObjectContext) throws {
        let all = NSFetchRequest(entityName: name)
        all.includesPropertyValues = false

        let allObjs = try ctx.executeFetchRequest(all)
        for obj in allObjs {
            obj.MR_deleteEntityInContext(ctx)
        }

    }
}

Вы все делаете это, кажется сложным. Вы можете просто отправить NSManagedObjectContext метод сброса

Другие вопросы по тегам