2017-10-10 48 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 Ÿ其他關閉,對不起,我是新來的快速和一般編程。 –