2017-07-21 5 views
2

Ich versuche, Daten von meinem ersten ViewController zu meinem zweiten zu senden.Daten zwischen 2 ViewControllern übergeben

Es funktioniert gut mit einem einfachen Int, aber mit diesem Double funktioniert es nicht und ich verstehe nicht warum. Wenn du erklären kannst, warum es nicht funktioniert, ist es cool!

Meine Erklärung in ersten Viewcontroller:

var time: Double? = 0.00 

Dann versuche ich es zu meinen anderen Viewcontroller zu senden:

let vc = segue.destination as! MySecondViewController 
    vc.rows = rows[pathForAVC] 
    vc.lap = lap[pathForAVC] 
    vc.indexPath = pathForAVC 
    vc.time = rows[pathForAVC]["Time"]! as! Double 

fatal error: unexpectedly found nil while unwrapping an Optional value

Und meinen zweiten Viewcontroller:

var time: Double? = 0.00 
topLabel.text = "\(time!)" 

NB:

Reihen ist ein Dictionnary:

var rows: [[String : AnyObject]] = [[:]] 

ich meinen Fehler nicht wirklich verstehen ...

+2

Das hat nichts mit der Weitergabe Ihres Wertes zu tun ... für mich sieht es aus wie "rows [pathForAVC] [" Time "]' scheint keinen Wert zu enthalten und Sie sind gezwungen, es auszupacken. Versuchen Sie, es mit 'if unwrappedTime = rows [pathForAVC] [" Time "] sicher auszupacken? Double {} ' –

+1

Es gibt zu viel Kraft Auspacken geht dort. Sie sollten es wirklich vermeiden. Je. – Desdenova

+0

Wenn Sie beabsichtigen, 'Double' in Ihrem Wörterbuch zu speichern, sollte sein Typ '' [[String: Any]] 'sein. "Double" entspricht "Any" und nicht "AnyObject". – Slayter

Antwort

3

Das Problem ist, dass Sie Kraft Abwickeln Wert sind, dass es nicht sein kann:

vc.time = rows[pathForAVC]["Time"]! as! Double 

Wenn rows[pathForAVC]["Time"]! Null ist, stürzt Ihre Anwendung ab. Sie sollten wirklich vermeiden mit !, es sei denn, Ihre Anwendung einfach kann nicht weiter ohne diesen Wert arbeiten. Und diese Situationen sollten selten sein.

Sie sollten stattdessen sicher auspacken Ihren Wert zeigt eine if let Anweisung wie folgt verwendet:

if let unwrappedTime = rows[pathForAVC]["Time"] as? Double { 
    print(unwrappedTime) 
} 

(Ich bin nicht in der Nähe von Xcode jetzt aber der obige Code sollte nahe genug, um wertvolle Hinweise vom Compiler zu erhalten) .

Lassen Sie mich wissen, wenn Sie weitere Erläuterungen benötigen.

+0

Danke Jungs! Jetzt habe ich verstanden, wie man einen Wert eindeutig auspackt. Und es funktioniert gut :) – pierreafranck

Verwandte Themen