我的问题只是为了更好地处理持久容器的后台方法。例如,在下面的代码中,因为核心数据在后台执行获取请求,我最终需要使用GCD在完成处理程序中向UI显示图像,是否正确?
func fetch(completion: @escaping (_ groupOfPhotos: [Photo]) -> Void) {
persistentContainer.performBackgroundTask { context in
context.automaticallyMergesChangesFromParent = true
let photo: [Photo] = try! context.fetch(Photo.fetchRequest())
completion(photo)
}
}
我也使用背景上下文来保存数据。
func save(_ binaryData: Data, with metadata: FIRStorageMetadata, _ reference: FIRStorageReference) {
persistentContainer.performBackgroundTask { context in
let photo = Photo(context: context)
photo.image = binaryData as NSData?
// etc
try! context.save()
self.context.performAndWait {
do {
try self.context.save()
} catch {
fatalError("Unable to save core data objects in main context: \(error)")
}
}
}
}
我在这里采取最好的方法吗?