swift - 如何确认核心数据执行

标签 swift core-data swift3

我正在尝试确认核心数据中的所有数据是否已通过以下来源删除(其中“CoreDataHelper.getCoreDataHelper().context”是 NSManagedObjectContext)

public static func delete(predicates: [NSPredicate] = []) {
    let fetchRequest = request(predicates: predicates)
    let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest)
    do {
        let result1 = try CoreDataHelper.getCoreDataHelper().context.fetch(fetchRequest)
        NSLog("Delete batch size: %d", result1.count)
        let result2 = try CoreDataHelper.getCoreDataHelper().context.execute(deleteRequest)
        NSLog("Delete request succeeded: %d", result2)
    } catch {
        NSLog("Delete request failed")
        return
    }
}

当我测试它时,日志中显示以下内容

Delete batch size: 1

Delete request succeeded: 250432

但是实际看到数据的时候,好像并没有删除。 我尝试添加数据,因为发生错误,数据已经在核心数据中。

public static func add(from object: Dictionary<String, Any>) -> NSManagedObjectProtocol? {
    let exists = fetch(id: object)
    if exists.count > 0 {
        NSLog("Object already exists in CoreData : %@", object.description)
        return nil
    } else {
        return newObject(object: object) as NSManagedObjectProtocol
    }
}

Object already exists in CoreData : ....

所以我的问题是我怎么知道 NSBatchDeleteRequest 的执行功能是否正常工作。是否有一个返回值可以用来确认执行是否没有错误?

最佳答案

删除后保存你的NSManagedContext:

public static func delete(predicates: [NSPredicate] = []) {
    let fetchRequest = request(predicates: predicates)
    let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest)
    do {
        ...
        let result2 = try CoreDataHelper.getCoreDataHelper().context.execute(deleteRequest)
        //save context
        try CoreDataHelper.getCoreDataHelper().context.save()
    } catch {
        NSLog("Delete request failed")
        return
    }
}

关于swift - 如何确认核心数据执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41533954/

相关文章:

swift - Swift 中的编译时关键路径检查

core-data - 当 SwiftUI 中的相关实体发生更改时,如何更新 @FetchRequest?

ios - 创建核心数据托管对象很困难

IOS swift 如何使用 UIActivityViewController 共享图像和文本

ios - Json 和变量范围

Swift 表示保留一个闭包参数

ios - 使用 Almofireimage 下载然后缓存单元格图像

IOS/ objective-c /核心数据 : Sum all the values for an attribute from query

swift - 如何在类模板方法上调用静态方法?

ios - Metal 中的多个 MTLDevice 实例