2017-10-10 57 views
0

我在这里有2个拾取器,并且图片的值被分配给从Firebase中拉出的数据。它被分配给一个数组,然后这些值被分配给选取器。这不起作用,我不确定为什么。 这里是我的代码:拾取器没有从正在从Firebase中拉出的数组中获取数据

import UIKit 
import Firebase 
import FirebaseDatabase 
class SearchSelectVC: UIViewController, UIPickerViewDelegate , UIPickerViewDataSource{ 

    @IBOutlet weak var locationPicker: UIPickerView! 
    @IBOutlet weak var datePicker: UIPickerView! 
    @IBOutlet weak var locationLB: UILabel! 
    @IBOutlet weak var dateLB: UILabel! 

    var locData: [String] = [String]() 
    var dateData : [String] = [String]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     initPickers() 
     getLoc(onCompletion: { (data) in 
      print(data) 
      self.locData = (data) 
      print(self.locData) 
     }) 
    } 


    func getDate(onCompletion: @escaping ([String]) ->()) { 
     var data : [String] = [] 
     let selectedLoc = locationLB.text 
     var dateRef: DatabaseReference! 
     dateRef = Database.database().reference().child("launch").child((selectedLoc)!) 
     dateRef.observe(.value) { (snapshot) in 
      for child in snapshot.children { 
       let snap = child as! DataSnapshot 
       let key = snap.key 
       data.append(key) 
       print("date = \(key)") 
       //print(data) 

      } 
      onCompletion(data) 
     } 
    } 
    func getLoc(onCompletion: @escaping ([String]) -> Void){ 
     print("here3") 
     var data : [String] = [] 
     var locRef: DatabaseReference! 
     locRef = Database.database().reference() 
     print("here4") 
     locRef.child("launch").observe(.value) { snapshot in 
      for child in snapshot.children { 
       let snap = child as! DataSnapshot 
       let key = snap.key 
       data.append(key) 
       print("location = \(key)") 
       //print(data) 


      } 
      onCompletion(data) 
     } 

    } 
    func numberOfComponents(in pickerView: UIPickerView) -> Int { 
     if(pickerView == locationPicker){ 
      return 1 
     } 
     else if(pickerView == datePicker){ 
      return 1 
     } 
     return 1 
    } 

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
     if (pickerView == locationPicker) { 

      return locData.count 
     } 
     else if (pickerView == datePicker) { 

      return dateData.count 
     } 
     return 1 
    } 
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
     if (pickerView == locationPicker) { 
      return locData[row] 
     } 
     else if(pickerView == datePicker){ 
      return dateData[row] 
     } 
     return "thisisbad" 
    } 
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) 
    { 
     if(pickerView == locationPicker){ 
      updateLabelLoc() 
      getDate(onCompletion: { (data) in 
       print(data) 
       self.dateData = data 
      }) 
     } 
     else if(pickerView == datePicker){ 
      updateLabelDate() 
     } 
    } 
    func updateLabelLoc(){ 
     let location = locData[locationPicker.selectedRow(inComponent: 0)] 
     locationLB.text = location 
    } 
    func updateLabelDate(){ 
     let date = dateData[datePicker.selectedRow(inComponent: 0)] 
     dateLB.text = date 
    } 
    func initPickers(){ 
     locationPicker.delegate = self 
     locationPicker.dataSource = self 
     datePicker.delegate = self 
     datePicker.dataSource = self 
    } 

} 

的数据是在完成处理程序和完成,从正确的数据库返回的数据。挑选者在其中没有任何数据显示。 谢谢!

回答

0

创建:

func updatePickers() { 
    locationPicker.reloadAllComponents() 
    datePicker.reloadAllComponents() 
} 

print(self.locData)(在getLoc(onCompletion:)(在viewDidLoad中()),提出:

self.updatePickers() 
+0

谢谢你这么多 –

+0

让我知道,如果它的工作原理您完成处理程序。最有可能在加载屏幕上的所有元素之后完成,所以你需要在你的数据加载完成后更新mainUI,这应该可以做到,你可能需要把它添加到你的代码中的其他闭包中。 – Causaelity

+0

你是什么意思是b Ÿ其他关闭,对不起,我是新来的快速和一般编程。 –