2016-07-28 14 views
0

Ich versuche einige Informationen an einen anderen View-Controller zu senden. Ich habe die Überfahrt gemacht und nichts zeigt. Ich verwende eine externe Klasse, um die Informationen zu organisieren. Aber ich bin mir nicht sicher, warum es nicht funktioniert.Swift, die übermittelten Informationen werden nicht angezeigt

erste View-Controller:

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

    if segue.identifier == "toLocationVC" { 

     let lVC = segue.destinationViewController as! LocationViewController 

     lVC.locationImage?.image = locations[locationSelection].image; 
     lVC.nameLabel?.text = locations[locationSelection].name; 
     lVC.descriptionTextView?.text = locations[locationSelection].desc; 

    } 

zweite Ansicht:

var selectedLocation : Location?; 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view. 

    locationImage.image = selectedLocation!.image 
    nameLabel.text = selectedLocation!.name 
    descriptionTextView.text = selectedLocation!.desc 

} 

und das ist die Klasse Ort:

class Location { 

var image : UIImage 
var name : String 
private var description : String 

var desc : String { 
    return description + "\n\n\nThis Description and Images Provided by http://www.travel.usnews.com" 
} 

init(name : String, image : UIImage, description: String) { 
    self.name = name; 
    self.image = image; 
    self.description = description; 
    } 
} 

Ich habe versucht, einige der Code um zu ändern, aber nichts scheint zu funktionieren.

+0

Warum setzen Sie den Code in 'didReceiveMemoryWarning'? – Christian

+0

oh mein schlechtes, ich schrieb es falsch hier .. es ist innerhalb der viewdidload – art3mis

+0

es funktioniert nicht .. es scheint die Informationen aus der ersten Ansicht ist nicht – art3mis

Antwort

0

Offensichtlich überschreiben Sie die Informationen, die Sie gerade prepareForSegue() in Ihrem zweiten View-Controller viewDidLoad() Methode überschreiben.

Entfernen Sie einfach den folgenden Code aus Ihrer viewDidLoad() und es sollte funktionieren (wenn dies tatsächlich der richtige Segue ist und alle Daten eingestellt sind):

locationImage.image = selectedLocation!.image 
nameLabel.text = selectedLocation!.name 
descriptionTextView.text = selectedLocation!.desc 

(Und ich habe das Gefühl, dass die selectedLocationnil ist (= nicht gesetzt) ​​in der viewDidLoad())

+0

meine selectedLocation sagt sagen ist null – art3mis

+0

So haben Sie die 3 Zeilen entfernt du 'viewDidLoad()'? – Mischa

+0

Ich habe aber immer noch nicht funktioniert – art3mis

0

ich würde die segue wie folgt umschreiben:.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "toLocationVC" { 
     if let lVC = segue.destinationViewController as? LocationViewController { 
      lVC.selectedLocation = locations[locationSelection] 
     } 
    } 

dann einen Breakpoint im if let lVC = segue...{ Block um zu sehen, ob es jemals ausgeführt wird. Durchlaufen Sie den Code und verwenden Sie den Befehl po {variable name here} im Debugger, um in jede Variable zu schauen.

Sie sollten in der Funktion viewDidLoad() nichts mehr einstellen, wie es von Mischa vorgeschlagen wurde. Löschen Sie diese Zuordnungen.

Wenn diese Antwort nicht hilft, müssen Sie Ihre Codelisten aktualisieren, um weitere Informationen zu enthalten. Wir können nicht genau sehen, wo viele dieser Variablen deklariert sind, oder ob die zweite Sicht die richtige Klasse ist.