0

私はこのクラッシュを何度も繰り返しており、何週間も手がかりがありません。ここで見逃しているものを確認していただければ幸いです。エラーログで次のように表示されるコードスニペット。

ここに画像の説明を入力

クラッシュするコード

 func validateFormFields (){

  var formType: FORMS_TYPE? = .LOG

      DispatchQueue.main.async {
 
             //Where this crashes i guess according to the Error Log 
            if FormsValidationManager.shared.validate(tableView: self.tableView, presentVC: self, formType: self.formType!) {
                
                DispatchQueue.main.async {
                    SwiftSpinner.show("Saving prospect form")
                }
                    //Save Prospect Form
                    self.formsViewModel.saveProspect(tableView: self.tableView, self.contactList) {
                      
                      self.formDataCompletionDelegate?.relaodTableData(formType: .PROSPECT)
                      self.dismiss(animated: true, completion: nil) //Exit Prospect form
                        
                    }

            }
        }
   }

FormsValidationManager.shared.validate クラス内のコードは次のとおりです。

 func validate(tableView: UITableView, presentVC: UITableViewController, formType: FORMS_TYPE) -> Bool {

    if formType == FORMS_TYPE.LOG {//Log form validation

        let logFormCell = tableView.cellForRow(at: IndexPath(row: 0, section: 0))
        if logFormCell != nil {
            textFieldValues.append(anotherDict: getTextFieldValues(enumType: LOG_FORM_TF_TAGS.self, cell: logFormCell))//add values to dict

            if let validationMessage = getValidationMessage(textFieldValues: textFieldValues, formType: formType, cell: [logFormCell!]) {
                Utils.shared.addReloadAlert(message: validationMessage, presentVC: presentVC, title: Constants.ALERT_TITLE)
                return false//form is invalid
            }
        }
        

    }  
 }

以下の支援方法

private func getTextFieldValues<T: RawRepresentable & CaseIterable>(enumType: T.Type, cell: UITableViewCell?) -> [String: String?] where T.RawValue == Int {

    var textFieldValues: [String: String?] = [String: String?]()

    for (_, element) in enumType.allCases.enumerated() {
        if let textField = cell?.viewWithTag(element.rawValue) as? UITextField {

            let caseLabelName = getEnumCaseLabelName(value: String(describing: enumType.init(rawValue: element.rawValue)))

            if textField.text!.isEmpty {
                textFieldValues.updateValue(nil, forKey: getTextFieldName(value: caseLabelName))
            } else {
                textFieldValues.updateValue(textField.text, forKey: getTextFieldName(value: caseLabelName))
            }

        }
    }

    return textFieldValues
  }
4

0 に答える 0