EXC_BAD_ACCESS (код = 1, адрес = 0x16fc5da60) в viewDidLoad - PullRequest
0 голосов
/ 24 мая 2018

В моем 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) .Также работает нормально в симуляторе проблем нет, но в реальных устройствах выдает ошибку .В чем может быть причина и как я могу ее решить?

...