Ich habe zwei ViewController's.
Gabe von Daten zwischen zwei Viewcontrollers (delegieren) - Swift
FirstVC
- Ich habelabel
undbutton
mit segue "modalen"SecondVC
- Ich habePickerView
undbutton
(back bis FirstVC):@IBAction func bntback(sender: AnyObject) { self.dissmissViewControllerAnimatied(true, completion: nil) }
Und ich erstellt Delegierten in SecondViewController
als:
protocol SendDataDelegate {
func sendData(text:String)
}
Next:
class SecondVC: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
var delegate: SendDataDelegate!
var firstvc = FirstVC()
var arr = ["First", "Second", "Third"]
@IBOutlet var pickview: UIPickerView!
override func viewDidLoad() {
super.viewDidLoad()
pickview.dataSource = self
pickview.selegate = self
}
Meine Funktion von PickerView
und in dieser Funktion, die ich meine Delegierten verwenden, wie:
func pickerView (pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
var text = arr[row]
dispatch_async(dispatch_get_main_quene(), {
self.delegate.sendData(text)//there is an error: "fatal error: unexpectedly found nil while unwrapping an Optional value"
)}
}
FirstVC:
class FirstVC: UIViewController, SendDataDelegate {
var data = SecondVC()
//....
override func viewDidLoad() {
super.viewDidLoad()
self.data.delegate = self
}
func sendData (text:String) {
mylable.text = text
//or
//var txt = text
//mylable.text = txt
}
}
Helfen Sie mir bitte mit diesem Problem.
'var data = SecondVC()' kann nicht arbeiten, da bereits eine Instanz von SecondVC in Interface Builder erstellt wurde. Die übliche Weise, den Delegierten einzustellen, ist in prepareForSegue – vadian