【发布时间】:2017-07-16 11:11:52
【问题描述】:
我有一些执行批量删除请求的核心:
extension NSManagedObject: Clearable {
/// Clears all objects of this type in coreData
static func clearAll() {
let context = AppDelegate.sharedInstance()?.coreDataHelper.objectContext()
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: String(describing:self))
let batchDeleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest)
do {
if let unwrappedContext = context {
unwrappedContext.shouldDeleteInaccessibleFaults = true
let result = try unwrappedContext.execute(batchDeleteRequest) as? NSBatchDeleteResult
DLog("result \(result.debugDescription)")
switch result!.resultType {
case .resultTypeCount:
DLog("resultTypeCount")
case .resultTypeObjectIDs:
DLog("resultTypeObjectIDs")
case .resultTypeStatusOnly:
DLog("resultTypeStatusOnly")
}
if let objectIDArray = result?.result as? [NSManagedObjectID] {
let changes = [NSDeletedObjectsKey : objectIDArray]
NSManagedObjectContext.mergeChanges(fromRemoteContextSave: changes, into: [unwrappedContext])
}
try context?.save()
}
} catch let error as NSError {
DLog("Error removing : \(error), \(error.localizedDescription)")
}
}
}
代码运行正常,但是批量删除的结果总是.resultTypeStatusOnly
https://developer.apple.com/library/content/featuredarticles/CoreData_Batch_Guide/BatchDeletes/BatchDeletes.html#//apple_ref/doc/uid/TP40016086-CH3-SW2 此处的文档在标题下说 在执行后更新您的应用程序
通知应用程序中的对象很重要 内存已过时,需要刷新。
为此,结果类型必须为.resultTypeObjectIDs,才能触发NSManagedObjectContext.mergeChanges(fromRemoteContextSave: changes, into: [unwrappedContext]) 部分。只是不清楚你是如何得到的。
如何设置结果的类型?
【问题讨论】: