2015-12-04 4 views
0

Уверен, у меня есть два контроллера вида, у которых есть соответствующие файлы в качестве их классов. (ViewController1.swift и ViewController2.swift) Я пытаюсь передать данные с одного из контроллеров представления на другой с помощью следующего кода; но я получаю ошибку «UIView Controller не конвертируется в ViewController2». Что мне делать? Я пытался изменить, как! и var, чтобы позволить; ни работали.Функция prepareForSegue не работает

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

     if (segue.identifier == "btnSubmitSegue") { 
     var svc = segue.destinationViewController as ViewController2; 
     svc.DataPassed = textField.text 

    } 
} 

код для ViewController2 импорта UIKit

class ViewController2: UIViewController { 

var toPass: String = "" 
@IBOutlet weak var labeld: UILabel! 



override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

     self.labeld.text = "passed: \(self.toPass)" 

} 




override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
    } 
} 

код для ViewController1

import UIKit 

    class ViewController1: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 



@IBOutlet weak var textField: UITextField! 

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

    if segue.identifier == "TheSegue" { 
     let vc = segue.destinationViewController as! ViewController2 
     vc.toPass = self.textField.text! 
    } 
    } 


} 
+0

В приведенном выше коде нет 'ViewController2'. Это фактический код, который привел к этой ошибке? Если нет, можете ли вы опубликовать код, создающий ошибку? UIViewController не конвертируется в ViewController2'. –

+0

Это не проблема. Я выбрал ViewController2, чтобы задать вопрос, теперь я тоже изменил его в приведенном выше коде. Какова реальная проблема :)? –

+0

- это ваш ViewController2, расширяющий класс UIViewController? –

ответ

1

Следующий пример отлично работает для меня. Код для первого контроллера вида:

class ViewController: UIViewController { 

    @IBOutlet weak var textField: UITextField! 

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

     if segue.identifier == "TheSegue" { 
      let vc = segue.destinationViewController as! ViewController2 
      vc.passedText = self.textField.text! 
     } 
    } 
} 

А во втором контроллере представления:

class ViewController2: UIViewController { 
     var passedText: String = "" 
     @IBOutlet weak var label: UILabel! 

     override func viewDidLoad() { 
      super.viewDidLoad() 
      self.label.text = "passed: \(self.passedText)" 
     } 
    } 

Не забудьте назвать SEGUE в раскадровке:

enter image description here

Ваш контроллер точки назначения ссылается на неправильный контроллер. Вы должны иметь это в вашем коде, не as! ViewController1:

let vc = segue.destinationViewController as! ViewController2 

необходимо также, чтобы исправить IBOutlet имя, то vc.toPass = self.textField.text! должно быть:

vc.toPass = self.labeld.text! 

Убедитесь, что пользовательский класс установлен для второго контроллера представления :

enter image description here

+0

Я написал то же самое, но мой не работает! –

+1

@ ArdaBoğa Пожалуйста, добавьте остальную часть кода на свой вопрос. Это поможет людям ответить на ваш вопрос. В противном случае может возникнуть проблема, о которой мы не знаем. – wigging

+0

Я только что добавил его к вопросу –

0

Это может быть просто, что ViewController2 не объявлен как подкласс как UIViewControl Лер.
В верхней части ViewController2 файл, который вы бы объявить его следующим образом:

class ViewController2: UIViewController { 

    \\ ... 

} 
+0

Он объявлен как подкласс как UIViewController –

0

ли вы установили имя в раскадровке? В пользовательском классе Class должен указывать на класс, связанный с контроллерами представления.

enter image description here

this class is not key value coding-compliant for the key labelPassedData.' But I do not even have a variable like labelPassedData

Нажмите просматривать контроллер и нажмите кнопку со стрелкой вправо рукой, она показывает все соединения.

enter image description here

Я предполагаю, что вы скопировать и вставить контроллеры просмотра и, следовательно, вы получите эту проблему.

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