【问题标题】:Clear all entities of core data DB except one entity清除核心数据数据库中除一个实体外的所有实体
【发布时间】:2019-06-10 08:53:12
【问题描述】:

我需要清除 CoreData 中的所有核心数据实体数据,而不是一个实体。即不应删除一个实体。一种方法是逐个实体地清除实体并为所需的实体蒙皮。但是我们是否可以将实体备份或保留在 RAM 中,清除所有 Db 并重新保存实体。有可能吗?

【问题讨论】:

    标签: ios swift database core-data


    【解决方案1】:

    您可以使用NSBatchDeleteRequest 批量删除实体,代码假定managedObjectContext 作为当前托管对象上下文:

    let entityNamesToDelete = ["Foo", "Bar", "Baz"]
    let persistentStoreCoordinator = managedObjectContext.persistentStoreCoordinator!
    
    do {
        for entityName in entityNamesToDelete {
            let request = NSFetchRequest<NSFetchRequestResult>(entityName: entityName)
            let deleteRequest = NSBatchDeleteRequest(fetchRequest: request)
    
            try persistentStoreCoordinator.execute(deleteRequest, with: managedObjectContext)
    
        }
        try managedObjectContext.save()
    
    } catch { print(error) }
    

    【讨论】:

    • 我有大约 30 个实体,但我需要恢复 1 个实体。有什么办法可以把它保存在内存中,删除核心数据后重新保存。
    • 是的,当然。添加Codable一致性,以JSON格式进行备份,删除实体的内容并重新创建记录。工作量取决于所涉及关系的数量。
    • 它有 6 个相关的表。转换为 json 并再次将其转换为托管对象是否容易?
    • 这取决于具体的模型图
    猜你喜欢
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多