我正在尝试确认核心数据中的所有数据是否已通过以下来源删除(其中“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/