2017-02-26 2 views
-5

Ich versuche, ein Array von meinem Viewcontroller aus aufzurufen und dann Text von diesem Array, das Objekte enthält, zu setzen. Aber wenn ich das Segment führe, gibt es mir nur einen "Index außerhalb der Reichweite". Ich sehe nicht, was ich falsch gemacht habe. Ich habe auch versucht, das Selbst zu benutzen. Überall im Anruf scheint es aber das Problem zu sein.Warum ist das nicht im Index?

Der variable Film ist, wo ich versuche, nur 1 Film aus dem Array zu bekommen, aber das gleiche Problem besteht fort. Habe ich mit meinem Viewcontroller etwas falsch gemacht oder muss ich einen Wert übergeben?

Detailsviewcontroller ist der Controller für die neue Ansicht und die Tabellenansicht, deshalb habe ich eine andere Klasse innerhalb der Datei erstellt.

Datei: DetailsviewController

import UIKit 
class DetailsViewController: UIViewController, UITableViewDataSource,UITabBarDelegate { 

    @IBOutlet weak var tableView: UITableView! 



    var mainController = ViewController() 

    var movie = ViewController().self.movieArray[0] 





    var titles = ["Title", "Release Date","Genres","OverView"] 



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



    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return titles.count 
    } 
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = self.tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! DetailsCustomcell 

     cell.detailTitle.text = titles[indexPath.row] 
     if indexPath.row == 0{ 
     cell.detailContent.text = "" 
     } 
     if indexPath.row == 1{ 
      cell.detailContent.text = "" 
     } 
     if indexPath.row == 2{ 
      cell.detailContent.text = "Movie genre´s is not fixed yet" 
     } 
     if indexPath.row == 3{ 
      cell.detailContent.text = "" 
     } 
      return cell 
    } 





    /* 
    // MARK: - Navigation 

    // In a storyboard-based application, you will often want to do a little preparation before navigation 
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     // Get the new view controller using segue.destinationViewController. 
     // Pass the selected object to the new view controller. 
    } 
    */ 

} 
class DetailsCustomcell: UITableViewCell{ 

    @IBOutlet weak var detailTitle: UILabel! 

    @IBOutlet weak var detailContent: UILabel! 

} 
+0

Beachten Sie, dass sich die beiden Instanzen von 'ViewController()' voneinander unterscheiden und sich von der 'ViewController'-Instanz im Storyboard oder Xib unterscheiden. Das ist das Problem. Sie benötigen den tatsächlichen Verweis auf den View-Controller. – vadian

+0

Was ist die Zeile 'var mainController = ViewController()' für? Es scheint unbenutzt und was ist die 'ViewController' Klasse? Was macht 'var movie = ViewController(). Self.movieArray [0]' versuchen zu tun? Ich denke, das ist die Zeile, die das Problem verursacht, aber um klar zu sein, geben Sie bitte an, welche Zeile die Ausnahme verursacht, und fügen Sie die * full * -Fehlermeldung zu Ihrer Frage hinzu. –

+0

Mögliches Duplikat von [Wie teilen Sie Daten zwischen View-Controllern und anderen Objekten in Swift?] (Http://stackoverflow.com/questions/29734954/how-do-you-share-data-between-view-controllers-and -other-objects-in-swift) – brimstone

Antwort

0

nicht sicher, was das ist:

var mainController = ViewController() 
var movie = ViewController().self.movieArray[0] 

Egal, instanziiert ViewController() ein neues Objekt dieser Klasse. An diesem Punkt ist es sehr wahrscheinlich movieArray wurde nie initialisiert und hat keine Objekte darin.

+0

Aha, dachte nicht daran! Wie referenziere ich konkret einen Viewcontroller? – Pr0tonion

+0

Es hängt wirklich davon ab. Aber meine Frage würde mit beginnen, warum müssen Sie den "Film" von diesem View-Controller-Eigenschaft anstelle von was auch immer Datenquelle die "MovieArray" zu Beginn mit? – Frankie

+0

Der Grund, warum ich den Film brauche, ist, weil ich den Inhalt des Arrays lesen möchte. Die "Film" -Variable war nur etwas, das ich ausprobierte. Ich habe ein MovieArray in meinem viewcontroller.swift, wo ich eine Anfrage bekomme und dann mein MovieArray mit Filmobjekten bevölkere. Wenn der Film angeklickt wurde, möchte ich die Details dieses bestimmten Films anzeigen. – Pr0tonion

Verwandte Themen