2017-02-26 13 views
-5

私はビューコントローラから配列を呼び出して、オブジェクトを含む配列からテキストを設定しようとしています。しかし、私がsegueを実行するとき、それは私に "範囲外のインデックス"を与えるだけです。私は何が間違っているのか分かりません。私も自分自身を使用しようとしました。呼び出しのどこでもそれはdosentが問題であるようである。これはなぜインデックス外ですか?

可変のムービーは、配列から1つのムービーだけを取得しようとしていますが、同じ問題がそのまま残ります。私はviewcontrollerに何か問題があったのですか、それとも価値を渡す必要がありますか?

Detailsviewcontrollerは新しいビューとテーブルビューのコントローラです。そのため、ファイル内に別のクラスが作成されています。

ファイル: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

'ViewController()'の2つのインスタンスが互いに異なっていて、ストーリーボードまたはxibの 'ViewController'インスタンスと異なると考えてください。それが問題です。 View Controllerへの実際の参照が必要です。 – vadian

+0

'var mainController = ViewController()'の行は何ですか?未使用で、 'ViewController'クラスは何ですか? 'var movie = ViewController()。self.movi​​eArray [0]'は何をしようとしますか?私はこれが問題の原因となっているラインだと思いますが、どのラインが例外を引き起こしているのかを明示し、あなたの質問に*完全なエラーメッセージを追加してください。 –

+0

[ビューコントローラと他のオブジェクト間でデータをどのように共有しますか?]の複製は可能ですか?(http://stackoverflow.com/questions/29734954/how-do-you-share-data-between-view-controllers-and -other-objects-in-swift) – brimstone

答えて

0

ないこれが何であるかを確認します。

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

にかかわらず、ViewController()は、そのクラスの新しいオブジェクトをインスタンス化します。その時点では、movieArrayは初期化されておらず、オブジェクトもありません。

+0

ああ、それを考えなかった!どのように具体的にviewcontrollerを参照するのですか? – Pr0tonion

+0

それは本当に依存しています。しかし、私の質問はなぜ始まったのでしょうか?最初に 'movieArray'を移植したデータソースではなく、このビューコントローラのプロパティから 'ムービー'を取得する必要がありますか? – Frankie

+0

なぜ映画が必要なのかは、Arrayの内容を読みたいからです。 "映画"変数は私がテストしていたものでした。私はviewcontroller.swiftにmovieArrayを持っています。ここで取得リクエストを行い、movieArrayにmovieオブジェクトを設定します。ムービーがクリックされると、そのムービーの詳細を表示したいと考えています。 – Pr0tonion

関連する問題