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