任何人都可以帮我修复我的API调用功能。我解析数据并将其存储在结果中,如果在解析时出现任何错误,则抛出失败的json错误。如果解析成功,那么我将数据保存在数据库中。 但是,在json解析失败后,我的应用程序在此行崩溃了
return completion(.failure(.jsonError("Values of expenses not found")))
这是我的全部功能: -
func loadExpenseOfReport(organizationID: Int, reportID: Int, completion: @escaping (Result) -> Void) {
self.remote.loadExpensesOfReport(organizationID, reportID: reportID) { result in
switch result {
case .success(let json):
var result : (json: [[String: Any]], ids: [Int])
do {
result = try Expense.processExpenses(JSON: json!, organizationID: Int(self.user.organization.organizationID))
} catch let error {
return completion(.failure(.jsonError("Values of expenses not found"))) // App crashes here
}
print("result \(result)")
// Save in database
self.dataStack.enqueueCoreDataBlock({ context in
Sync.changes(result.json, inEntityNamed: "Expense", predicate: nil, parent: nil, parentRelationship: nil, inContext: context, operations: .all, completion: { error in
guard error == nil else {
return completion(.failure(.syncError(error!)))
}
return completion(.success(nil))
})
})
//return completion(.success(nil))
case .failure(let error):
return completion(.failure(error))
}
}
但是当我将数据库中保存的上述行更改为此时,它不再崩溃。
//self.dataStack.enqueueCoreDataBlock({ context in
Sync.changes(result.json, inEntityNamed: "Expense", predicate: nil, parent: nil, parentRelationship: nil, inContext: self.dataStack.viewContext, operations: .all, completion: { error in
guard error == nil else {
return completion(.failure(.syncError(error!)))
}
return completion(.success(nil))
})
//})
答案 0 :(得分:0)
你不需要返回'完成块。只需将其称为:
var result : (json: [[String: Any]], ids: [Int])
do {
result = try Expense.processExpenses(JSON: json!, organizationID: Int(self.user.organization.organizationID))
} catch let error {
completion(.failure(.jsonError("Values of expenses not found")))
}