0

2つのpickerViewがロードされた後で、ユーザーが最初に選択するとき、2つのpickerViewがあります。しかし、ユーザーがこの操作をやり直すと、2番目のpickerViewに追加されるすべてのデータ。ユーザーが最初のものを選択すると、2番目のpickerViewコンテンツをクリアする必要があります。 reloadAllComponents()メソッドを使用していますが、動作しません。ピッカービューを2つからクリアするにはどうすればよいですか?

マイコード;

var country_array = [String]() 
    var countryIds_array = [String]() 
    var city_array = [String]() 
    var cityIds_array = [String]() 

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

func getCountry(){ 
     //var hata = false 
     print("Getting Country List") 
     let query = PFQuery(className: "cls_ulke") 
     query.limit = 300 
     query.order(byDescending: "oncelik") 
     query.findObjectsInBackground { (objects: [PFObject]?, error) -> Void in 
      if error == nil { 
       print("Getted!") 
       print("Looping------------------>") 
       if let objects = objects { 
        for object in objects{ 
         print(object.objectId ?? "BOŞ") 
         print(object["ulke_adi"]) 
         self.country_array.append(object["ulke_adi"] as! String) 
         self.countryIds_array.append(object.objectId!) 
        } 
        self.pckerview.delegate = self 
        self.pckerview.dataSource = self 
       } 
       print("<-------------------Looped") 
      }else{ 
       print("HATA") 
      } 
     } 
    } 

    func getCities(objectID:String){ 
     print("Getting City List") 
     let query = PFQuery(className: "cls_il") 
     query.limit = 1000 
     query.order(byDescending: "oncelik") 
     query.whereKey("ulke_ID", equalTo: PFObject(withoutDataWithClassName: "cls_ulke", objectId: objectID)) 
     query.findObjectsInBackground { (objects:[PFObject]?, error) in 
      if error == nil { 
       print("Getted!") 
       print("Looping------------------>") 
       if let objects = objects { 
        for object in objects { 
         print(object["il_adi"]) 
         self.city_array.append(object["il_adi"] as! String) 
         self.cityIds_array.append(object.objectId!) 
        } 
        self.pckerview2.reloadAllComponents() 
        self.pckerview2.delegate = self 
        self.pckerview2.dataSource = self 
       } 
       print("<-------------------Looped") 
      }else{ 
       print("HATA") 
      } 
     } 
    } 

    func numberOfComponents(in pickerView: UIPickerView) -> Int { 
     return 1 
    } 

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
     var donecek = 0 
     if pickerView == pckerview { 
      donecek = country_array.count 
     }else if pickerView == pckerview2{ 
      donecek = city_array.count 
     } 
     return donecek 
    } 

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
     var donecek = "" 
     if pickerView == pckerview { 
      donecek = country_array[row] 
     }else if pickerView == pckerview2{ 
      donecek = city_array[row] 
     } 
     return donecek 
    } 

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
     if pickerView == pckerview { 
      tfield.text = countryIds_array[row] 
      getCities(objectID:countryIds_array[row]) 

     } 
    } 
+0

2番目のコンポーネントをメインピッカーに追加するとよいでしょう。 –

答えて

2

reloadAllComponents()はリロードのために代理人を呼び出しています。 documentationから:

このメソッドを呼び出すと、ピッカービューですべてのコンポーネントの新しいデータがデリゲートに照会されます。

ただし、コードの後に​​は、pckerview2.delegateの後にのみ設定していることが示されています。

self.pckerview2.reloadAllComponents() 
self.pckerview2.delegate = self 
self.pckerview2.dataSource = self 

は、だから私の推測では、それがnilあるようreloadAllCompontents()は、デリゲートを照会するために管理していなかったということです(あなたが他の場所でそれを設定していない限り)このように、以下のことを移動してみてください:。

self.pckerview2.delegate = self 
self.pckerview2.dataSource = self 
self.pckerview2.reloadAllComponents() 

第2の可能性は、city_arrayをクリアしていないため、常に都市を追加していることです。その場合は、forループの前にremoveAll()を追加するだけです。このようなもの:

+0

私はそれを試しても変更はありません。でもありがとう。 –

+0

@EmreErolもう一度見て、あなたの配列をクリアしていないようです。新しいアイテムを再度追加する前に配列をクリアしましたか?私の編集された答えを見てください。 –

+0

ありがとうございます。私は配列をクリアし、それは働いた! –

関連する問題