2016-04-29 13 views
2

Ich bin überhaupt nicht sicher, warum das passiert. Wenn ich versuche, prepareForSegue zu verwenden, bekomme ich "Unerwarteterweise gefunden Null beim Entpacken optionaler Werte". Ich weiß, was es bedeutet und wo es passiert, aber ich habe keine Ahnung warum.Finding nil wenn prepareForSegue Swift

Es tritt ein Fehler auf einer der in meinem Code markierten Zeilen auf. Ich habe bereits die Werte dateText und currentDate getestet und keine sind null.

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

    var DestViewController : CreatePostScrollViewController = segue.destinationViewController as! CreatePostScrollViewController 

    if dateText != "" { 

     DestViewController.startTimeDateButton.setTitle(dateText, forState: .Normal)// Error Here 

    } else if dateText == "" { 

     DestViewController.startTimeDateButton.setTitle(currentDate, forState: .Normal)// Error Here 
    } 
} 

Jede Hilfe wird sehr geschätzt!

+0

Es ist höchstwahrscheinlich 'startTimeDateButton' die Null – Literphor

+0

' ist destinationVi ewController' kann bei dieser Methode nicht wirklich "nil" sein ... aber * könnte * möglicherweise der falsche Typ sein. In beiden Fällen lautet die wirkliche Antwort hier, den Crash-Operator nicht mehr zu verwenden. – nhgrif

+0

Was ist der Absturzoperator? – m1234

Antwort

1

Wenn prepareForSegue aufgerufen wird, sind die Benutzeroberflächenelemente des Zielcontrollers möglicherweise noch nicht initialisiert. Was Sie stattdessen tun sollten, ist ein Feld in CreatePostScrollViewController wie dieses:

var buttonTitle: String?; 

Dann in Ihrem viewWillAppearMethod innerhalb CreatePostScrollViewController der Schaltfläche Titel zum buttonTitle Feld gesetzt haben Sie wie folgt aus:

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated); 
    if let buttonTitle = buttonTitle { 
     startTimeDateButton.setTitle(buttonTitle, forState: .Normal); 
    } 
} 

schließlich zu beenden die Geschichte in der prepareForSegue tun:

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

    var DestViewController : CreatePostScrollViewController = segue.destinationViewController as! CreatePostScrollViewController 

    if dateText != "" { 

     DestViewController.buttonTitle = dateText 

    } else if dateText == "" { 

     DestViewController.buttonTitle = currentDate 
    } 
} 
Verwandte Themen