Массив Выбор первых данных на пикере Swift - PullRequest
0 голосов
/ 23 июня 2019

Резистор массива 1, массива 3 массива IM, и я в этом собираю.Я хочу нарисовать первый элемент этого массива.Но когда я делаю это, я получаю ошибку на практике.Как получить первые данные в окне выбора в текстовом поле?Я хочу напечатать текстовое поле для первых данных в окне выбора.Код не работает с этим состоянием.

Я получаю сообщение об ошибке в этой строке кода:

 getDevice.text = gradePickerValues[0]
     override func viewDidLoad() {
            super.viewDidLoad()
GetDevice()
    getDevice.text = gradePickerValues[0]
    }

      var picker = UIPickerView()

        var gradePickerValues1 = [String]()
        var gradePickerValues2 = [String]()
        var gradePickerValues3 = [String]()
        var gradePickerValues = [String]()

        let multiplearray = DispatchGroup()


        @objc func GetDevice() {


            if !chipnumber.text!.isEmpty {
                 multiplearray.enter()

                let ref = Database.database().reference().child(chipnumber.text!).child("titles").child("0").child("DeviceName")

                ref.observeSingleEvent(of: .value, with: { (snapshot) in
                    //let value: NSDictionary = snapshot.value as! NSDictionary
                    let dic = snapshot.value as! String
                    self.gradePickerValues1 = [dic]
                    self.multiplearray.leave()
                })

            }

            if !chipnumber2.text!.isEmpty {
                multiplearray.enter()

                let ref = Database.database().reference().child(chipnumber2.text!).child("titles").child("0").child("DeviceName")

                ref.observeSingleEvent(of: .value, with: { (snapshot) in
                    //let value: NSDictionary = snapshot.value as! NSDictionary
                    let dic = snapshot.value as! String
                    self.gradePickerValues2 = [dic]
                    self.multiplearray.leave()
                })

            }

            if !chipnumber3.text!.isEmpty {
                multiplearray.enter()

                let ref = Database.database().reference().child(chipnumber3.text!).child("titles").child("0").child("DeviceName")

                ref.observeSingleEvent(of: .value, with: { (snapshot) in

                    let dic = snapshot.value as! String
                    self.gradePickerValues3 = [dic]
                    self.multiplearray.leave()
                })

            }

            multiplearray.notify(queue:.main) {

                self.gradePickerValues = self.gradePickerValues1 + self.gradePickerValues2 + self.gradePickerValues3

            }
        }

        func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int){
            getDevice.text = gradePickerValues[row]

            switch row {
            case 0:
                    fetchDevies()

            case 1:
                    fetchdevieschip2()

            case 2:
                    fetchdevieschip3()

            default: break

            }
            self.view.endEditing(true)
        }

1 Ответ

0 голосов
/ 23 июня 2019

GetDevice() содержит асинхронные задачи.Обновите метку в notify замыкании после заполнения массива.

И, пожалуйста, назовите функции / методы, начиная со строчной буквы.

override func viewDidLoad() {
   super.viewDidLoad()
   getDevice()
} 

...

@objc func getDevice() {

...

   multiplearray.notify(queue:.main) {
      self.gradePickerValues = self.gradePickerValues1 + self.gradePickerValues2 + self.gradePickerValues3
      getDevice.text = gradePickerValues[0]
   }
...