【发布时间】:2023-04-02 16:05:01
【问题描述】:
有一个功能,我正在使用 Cora Data 将来自网络响应的数据存储到我的数据库中。如果某些数据丢失,或者为空或 null 等,该函数应该抛出一个 DataError 异常。
数据库操作必须在privateQueueContext 的后台任务上运行。在将数据存储到数据库之前,我检查它是否已经存在(通过fetchRequest)。如果结果为空,我开始处理数据并将其存储到数据库中。
我可以从闭包外部抛出异常,但我也想在 performBackgroundTask 闭包中抛出异常,但我遇到了构建错误。
方法如下:
private func processLittleItems(informationsFromWebServiceResponse : GetInformationsFromWebServiceResponse) throws {
guard let littleItemListDataFromResponse = informationsFromWebServiceResponse.littleItemList else {
throw DataError.dataMissing("littleItemList")
}
CoreDataStack.shared.persistentStoreContainer.performBackgroundTask { privateQueueContext in
for littleItem in littleItemListDataFromResponse {
let littleItemRequest = LittleItem.fetchRequest() as NSFetchRequest<LittleItem>
littleItemRequest.predicate = NSPredicate(format: "id = %@", littleItem.iD!)
littleItemRequest.fetchLimit = 1
do {
let littleItemlist = try privateQueueContext.fetch(littleItemRequest)
if (littleItemlist.isEmpty) {
let newLittleItem = LittleItem(context: privateQueueContext)
guard let littleItemId = littleItem.iD else {
return // HERE SHOULD BE THROW EXCEPTION, NOT JUST A RETURN
}
newLittleItem.id = littleItemId
newLittleItem.optionalThing = littleItem.optionalThing ?? false
}
} catch let error as NSError {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
}
do {
try privateQueueContext.save()
} catch let error as NSError {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
}
}
你能帮忙吗?
提前感谢您提供的任何帮助。
【问题讨论】: