NSBatchDeleteRequest不会删除外部文件

时间:2017-09-14 17:36:17

标签: ios core-data

使用批量删除删除核心数据对象时,不会删除对象的外部二进制数据。难道我做错了什么?或者这是苹果公司的一个错误吗?

重现:

我已经设置了一个简单的核心数据项目。数据模型定义了一个ImageProperty实体,其二进制数据属性为"允许外部存储"。

ImageProperty definition

我不会对Apple提供的persistentContainer的实现做任何更改:

lazy var persistentContainer: NSPersistentContainer = {
    let container = NSPersistentContainer(name: "ExternalStorage")
    container.loadPersistentStores(completionHandler: { (storeDescription, error) in
        ...
    })
    return container
}()

在应用程序启动时,我创建并保存ImageProperty的实例,其数据足够大,可以存储在外部。然后我立即使用批量删除删除该属性:

let entityName = String(describing: ImageProperty.self)

// Create property

let entity = NSEntityDescription.entity(forEntityName: entityName, in: persistentContainer.viewContext)!
let property = ImageProperty(entity: entity, insertInto: persistentContainer.viewContext)
property.data = NSData(contentsOfFile: Bundle.main.path(forResource: "sample-house-a", ofType: "jpg")!)
try! persistentContainer.viewContext.save()

// Batch-delete property

let fetch: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: entityName)
let request = NSBatchDeleteRequest(fetchRequest: fetch)
_ = try! self.persistentContainer.viewContext.execute(request) as! NSBatchDeleteResult
try! self.persistentContainer.viewContext.save()

当我检查应用程序的沙箱时,该项目已从数据库中删除:

Table with no rows

但外部文件仍然存在:

enter image description here

为什么呢?任何建议表示赞赏!

0 个答案:

没有答案