2017-01-30 2 views
0

Versuchen Sie, ein Array zwischen den View Controllern zu übergeben. Ich bin mir nicht sicher, warum so ziemlich sicher, dass das Array etwas darin hat, aber wenn es auf der anderen Seite ankommt, scheint es leer zu sein. Keine Fehler ... nur leer.Übergeben Sie das Array zwischen den View Controllern

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "segueMapSelection" { 

      if let destinaton = segue.destination as? MapTableChoiceViewController { 
       //destinaton.maps = sender as? [SkiMap] 
       print("size of array before passing it through: ", maps.count) 
       destinaton.maps = self.maps 
      } 
     } 
    } 

    @IBAction func SelectDifferentMapButton(_ sender: Any, forEvent event: UIEvent) { 
      performSegue(withIdentifier: "segueMapSelection", sender: self.maps) 


    } 

Auf meinem Empfangsviewcontroller habe ich eine

var maps : [ObjectTypeHere]! = [] 

Jede Idee, was ich hier tue? Ich habe den Code kommentiert von der anderen Art, wie ich es versucht habe. Als ich das versuchte gab es einen Fehler.

Danke für Ihre Hilfe.

+1

var maps: [ObjectTypeHere]! Nur das in Ihrem zweiten View-Controller –

+0

Ok ... also tat ich das und es zeigt mir wahrscheinlich das Problem. Es heißt jetzt: Schwerwiegender Fehler: unerwartet gefunden Null beim Entpacken ein optionaler Wert – user2091936

+0

Ok, also die Arrays hat den gleichen Typ? Ihr zweites View-Controller-Array ist ObjectTypeHere Vielleicht haben Sie das für das Beispiel getan, aber ich frage trotzdem –

Antwort

1

Das Problem hängt mit der Reihenfolge der Vorgänge in den Lebenszykluszyklen der Ansichtscontroller zusammen.

  • self.maps ist an einem gewissen Punkt in der Quelle sammeln VC
  • die Segue beginnt und erreicht prepare(for segue:) auftritt, was self.maps an das Ziel VC
  • geht erst dann die Zielsteuerung (MapTableChoiceViewController) ausführen viewDidLoad, die (wieder) das Array

Aus diesem Grund initialisiert, wenn Sie das Array als erklären:

var maps:[ObjectTypeHere]! 

Sie sollten das Array erfolgreich übergeben haben - vorausgesetzt, der Objekttyp zwischen self.maps und designation.maps ist identisch.

Für eine vollständige Definition der Reihenfolge der Ereignisse, here's eine detaillierte Beschreibung.

Verwandte Themen