2017-10-09 4 views
0

J'ai deux URL JSON. vouloir analyser entre deux UIPickerView. un UIPickerView for Country, et un autre pour la ville. J'ai pu analyser JSON en premier UIPickerView of Country, ici les données arrivent parfaitement. mais j'ai reçu un message de thread dans la fonction DidSelectRow lorsque je clique sur UIPickerView de la ville. s'il vous plaît essayer de résoudre ce problèmeSwift: Json analyser dans deux sélecteurVoir entre le pays et la ville

voici mon code.

var arrCountryPicker = [CountryPicker]() 

var arrCitiPicker = [CityPicker]() 

    var id = 0 
    var country_id = 0 

mes deux URL

let url = URL(string: "http://......./mobile-app/countries")

let url = URL(string: "http://......../mobile-app/city-by-country-id?country_id="+String(country_id))

PickerViewCode

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

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


    var country: Int = arrCountryPicker.count 

    if pickerView == cityPickerView { 

     country = self.arrCitiPicker.count 
    } 
    return country 
} 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 

    if pickerView == countryPickerView { 

     let titleRow = arrCountryPicker[row].name 

     return titleRow 

    } else if pickerView == cityPickerView{ 
     let titleRow = arrCitiPicker[row].name 

     return titleRow 
    } 
    return "" 
} 

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 

    countryTextField.text = arrCountryPicker[row].name 

    if pickerView == countryPickerView { 
     self.countryTextField.text = self.arrCountryPicker[row].name 
     self.country_id = self.arrCountryPicker[row].id! 
     self.countryPickerView.isHidden = true 
    } 
    else if pickerView == cityPickerView{ 

Thread about down code is "Thread 1: exc_bad_instruction(code=exc_1386_invop,subcode=0x0)

 self.cityTextField.text = self.arrCitiPicker[row].name 

     self.cityPickerView.isHidden = true 

    } 
    self.view.endEditing(true) 
} 


func textFieldDidBeginEditing(_ textField: UITextField) { 

    if (textField == countryTextField){ 
     self.countryPickerView.isHidden = false 

    } 
    else if (textField == cityTextField){ 
     self.cityPickerView.isHidden = false 

    } 

} 
+0

Assurez-vous que sont tous connectés vos points de vente. Il se peut que votre prise 'cityTextField' ne soit pas connectée. – rmaddy

+0

Essayez si laissez-le aussi. Peut être la valeur est nulle. essayez https://stackoverflow.com/questions/36871398/thread-1-exc-bad-instruction-code-exc-1386-invop-subcode-0x0 –

+0

dans quelle ligne vous avez fait face à cette question bro –

Répondre

0

Vous devez mettre à jour le tableau du sélecteur de villes à chaque fois que vous modifiez le pays. Dans la sélection du sélecteur de pays, appelez le service Web pour un identifiant de pays particulier et mettez à jour le tableau des villes.

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 

    //Remove this line 
    //txtCountry.text = self.arrCountries[row].name 

    if pickerView == CountryPicker { 
     self.txtCountry.text = self.arrCountries[row].name 
     self.country_id = self.arrCountryPicker[row].id! 

     //Update city array according selected country 
     self.updateCitiesFor(id: row) 

     self.CountryPicker.isHidden = true 
    } else if pickerView == cityPicker { 
     self.txtCity.text = self.arrCities[row].name 
     self.cityPicker.isHidden = true 
    } 
    self.view.endEditing(true) 
} 

func pour la mise à jour arrCitiPicker

func updateCitiesFor(id: Int) { 

    let url = URL(string: "http://......../mobile-app/\(id)") 

    //Call web service and store cities data of selected country into arrCitiPicker 

    //Clear city textfield when country change 
    self.txtCity.text = ""  

    //Update City Picker with new data 
    cityPicker.reloadAllComponents() 
} 
+0

merci pour la réponse. ce que je dois écrire pour mettre à jour arrCityPicker – Minzu

+0

Appelez le service Web pour les villes et ajouter des données de réponse dans le tableau. Mais d'abord imprimer votre tableau de villes. Votre erreur peut avoir une valeur nulle. –

+0

maintenant j'ai cette "erreur fatale: Index hors de portée" – Minzu