应用程序崩溃在EXC_BAD_ACCESS错误的完成处理程序中

时间:2018-01-23 16:38:11

标签: ios swift core-data

任何人都可以帮我修复我的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))
           })
       //})

1 个答案:

答案 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")))
           }