В моем ViewController у меня есть 15 PickerView и 15 текстовых полей.В редактировании текстового поля началась функция создания правильного представления выбора.Прежде всего, в моем методе viewDidLoad я даю их делегат и источники данных со следующим кодом.
self.firstPicker = UIPickerView(frame:CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 216))
self.firstPicker.delegate = self
self.firstPicker.dataSource = self
//When text field editing did begin function called following is executing.
func pickUpFirstPicker(_ textField : UITextField) {
self.kodPicker.backgroundColor = UIColor.white
textField.inputView = self.kodPicker
// ToolBar
let toolBar = UIToolbar()
toolBar.barStyle = .default
toolBar.isTranslucent = true
toolBar.tintColor = UIColor(red: 92/255, green: 216/255, blue: 255/255, alpha: 1)
toolBar.sizeToFit()
// Adding Button ToolBar
let doneButton = UIBarButtonItem(title: "OK", style: .plain, target: self, action: #selector(FiltreVC.pickerDoneClick))
let spaceButton = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let cancelButton = UIBarButtonItem(title: "CANCEL", style: .plain, target: self, action: #selector(FiltreVC.pickerCancelClick))
toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false)
toolBar.isUserInteractionEnabled = true
textField.inputAccessoryView = toolBar
}
@objc func pickerDoneClick() {
// 400 lines of if else statement
if (Services.list[sampleIndex].pageName == "XYZ" ||
Services.list[sampleIndex].pageName == "ABC") {
if (selected == 1) {
//
firstView.isHidden = true
secondView.isHidden = true
thirdView.isHidden = false
} else if (selected == 2) {
firstView.isHidden = false
secondView.isHidden = false
thirdView.isHidden = true
firstPicker.selectRow(0, inComponent: 0, animated: true)
pickerDoneClick()
}
}
}
После предоставления делегата и источников данных для представления выбора, я вызываю функцию (все еще в моем viewDidLoad)это около 400 строк оператора if-else.Согласно правильному оператору if, он выбирает средство выбора с помощью функции selectRow, а затем вызывает функцию, о которой я упоминал выше, которая называется pickerDoneClick.Это работает хорошо, если я использую эту функцию pickerDoneClick в моей панели выбора.Однако, если я использую его в моем viewDidLoad, он выдаст мне ошибку Поток 1: EXC_BAD_ACCESS (код = 1, адрес = 0x16fc5da60) .Также работает нормально в симуляторе проблем нет, но в реальных устройствах выдает ошибку .В чем может быть причина и как я могу ее решить?