使用批量删除删除核心数据对象时,不会删除对象的外部二进制数据。难道我做错了什么?或者这是苹果公司的一个错误吗?
我已经设置了一个简单的核心数据项目。数据模型定义了一个ImageProperty
实体,其二进制数据属性为"允许外部存储"。
我不会对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()
当我检查应用程序的沙箱时,该项目已从数据库中删除:
但外部文件仍然存在:
为什么呢?任何建议表示赞赏!