我有两个pickerViews,当用户在第二个pickerView加载后首先选择时。但是如果用户再次执行此操作,则所有数据都附加到第二个pickerView。当用户选择第一个时,我必须清除第二个pickerView内容。我正在使用reloadAllComponents()方法,但它没有用。
我的代码;
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)
reloadAllComponents()
正在调用您的委托进行重新加载。来自documentation:
调用此方法会使选择器视图向委托查询所有组件的新数据。
但是,您的代码显示您只在其后设置pckerview2.delegate
。
self.pckerview2.reloadAllComponents()
self.pckerview2.delegate = self
self.pckerview2.dataSource = self
所以我的猜测是reloadAllCompontents()
没有设法查询代理,因为它是nil
。(除非您已将其设置在其他位置)尝试将其移动到下面,如下所示:
self.pckerview2.delegate = self
self.pckerview2.dataSource = self
self.pckerview2.reloadAllComponents()
第二种可能性是您没有清除city_array
,因此您总是将城市附加到城市。如果是这种情况,则在for
循环之前添加removeAll()
。像这样:
print("Looping------------------>")
if let objects = objects {
self.city_array.removeAll()
self.cityIds_array.removeAll()
for object in objects {
// rest of the codes