2016-01-16 2 views
0

Я реализую UIPickerView, заселенный от объектов parse.com. Я хочу показать выбранную строку строки из pickerView в TextField.Не удалось отличить значение исключения типа в UIPickerView

При выполнении, когда пользователь выбирает подряд TextField показывает текст, но затем при попытке передать TextField текст на другой ViewController, приложение запускает исключение:

Не удалось ввергнуть значение типа

Это код:

class CitaServicio3: UIViewController,UITextFieldDelegate,UIPickerViewDataSource,UIPickerViewDelegate { 
    var receivedNombre: String = "" 
    var receivedEmail: String = "" 
    var receivedCelular: String = "" 
    var receivedTelefono: String = "" 
    var receivedFecha: String = "" 
    var receivedHora: String = "" 

    @IBOutlet weak var vehiculoPickerView: UIPickerView! 
    @IBOutlet var vehiculoTextField:UITextField! 

    var pickerString:NSMutableArray = [] 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     print("receivedNombre=",receivedNombre) 
     print("receivedEmail=",receivedEmail) 
     print("receivedCelular=",receivedCelular) 
     print("receivedTelefono=",receivedTelefono) 
     print("receivedFecha=",receivedFecha) 
     print("receivedHora=",receivedHora) 

     let query = PFQuery(className: "autos") 
     query.findObjectsInBackgroundWithBlock({ (objects : [PFObject]?, error: NSError?) -> Void in 
      if error == nil { 
       for object in objects! { 
        print (object["modelo"]) 
        self.pickerString.addObject(object["modelo"] as! String) 
       } 
      } 
      self.vehiculoPickerView.reloadAllComponents() 
     }) 
    } 

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

    // returns the # of rows in each component.. 
    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int 
    { 
     return self.pickerString.count 
    } 


    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? 
    { 
     return self.pickerString[row] as? String 
    } 

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) 
{ 
    self.vehiculoTextField.text = self.pickerString[row] as? String 
} 

    @IBAction func continuarButton(sender: AnyObject) 
    { 
     let vehiculoCita = vehiculoTextField.text 
      if (vehiculoCita!.isEmpty){ 
      let myAlert = UIAlertController(title: "Faltan datos", message: "Su vehiculo es obligatorio", preferredStyle: UIAlertControllerStyle.Alert) 
      let OKAlert = UIAlertAction(title: "Reintentar", style: UIAlertActionStyle.Default, handler: nil) 
      myAlert.addAction(OKAlert) 
      self.presentViewController(myAlert, animated: true, completion: nil) 
      return 
     } 
     [self .performSegueWithIdentifier("cita3a4", sender: self)] 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 

     print (segue.identifier) 
     print (vehiculoTextField.text) 
     if "cita3a4" == segue.identifier { 
      let cita4: CitaServicio4 = segue.destinationViewController as! CitaServicio4 

      cita4.receivedNombre = receivedNombre 
      cita4.receivedEmail = receivedEmail 
      cita4.receivedCelular = receivedCelular 
      cita4.receivedTelefono = receivedTelefono 
      cita4.receivedFecha = receivedFecha 
      cita4.receivedVehiculo = vehiculoTextField.text! 
     } 
    } 

Что плохого в код?

+1

«Что не так в коде» Вы говорите нам. В какой строке происходит ошибка? Каково точное сообщение об ошибке? Не просто бросайте весь код на стену, как спагетти, и ожидайте, что мы его очистим. – matt

+0

@ Matt, это полное сообщение: Не удалось бросить значение типа 'Pedro_Villarejo_App_Clientes.CitaServicio3' (0x1032475f0) к 'Pedro_Villarejo_App_Clientes.CitaServicio4' (0x103247990), сразу после печати: печать (segue.identifier) ​​ печати (vehiculoTextField.text) – mvasco

ответ

2

Вы говорите:

let cita4: CitaServicio4 = segue.destinationViewController as! CitaServicio4 

Но адресат вид контроллер этого Segue является не CitaServicio4. (Это, по сути, CitaServicio3.) Поэтому вы ругаетесь во время выполнения, когда принудительный бросок оказывается невозможным.

Кажется, что структура вещей в вашем раскадровке не то, что вы думаете. Перепроверьте свои segues, особенно. их идентификаторы раскадровки и класс контроллера вида, к которому они ведут.

+0

Нет @matt, контроллер вида назначения на самом деле является CitaServicio4. – mvasco

+0

Нет, на самом деле это не CitaServicio4. Если бы это был CitaServicio4, вы бы не рухнули. Поверь мне в этом. Попытайтесь вспомнить, что вы тот, кто задает вопрос; это означает, что вы не знаете. Попытайтесь отпустить свои предубеждения и послушать то, что вам говорят. – matt

+0

Я проверю это ... спасибо – mvasco

Смежные вопросы