2016-08-12 5 views
1
のインデックスアウト

私は自分のアプリケーションでエラーに出くわしました:iOSの - レンジ

fatal error: Index out of range (lldb)

私は問題はしかし、上の手掛かりを持っていない、何であるかのようなアイデアを持っているかもしれないと思いますエラーを修正する方法。

私はセクションヘッダーを使用しているため、この問題が発生していると思います。私はコーディングを読むだけでなく、それを修正してオンラインで検索することを証明しています。以下は私のコードのサンプルを投稿したものです(数百行のコードが含まれているので、すべて含めたくありませんでした)。

基本的には、ユーザーがオプションを選択してテキストが表示されるSWRevealと組み合わせてTableViewControllerを使用しています。

class BackTableVC: UITableViewController { 


    struct Brands { 
     var sectionName : String! 
     var sectionBrands : [String]! 
    } 


    struct ThirdView { 
     var ThirdViewArray = [String]() 
    } 

    var brandArray = [Brands]() 



    var ThirdArray = [ThirdView]() 

    var brandAnswerArray = [String]() 

    override func viewDidLoad() { 

     brandArray = [ 


      Brands(sectionName: "Bugatti", sectionBrands: ["EB 110","Veyron"])] 

     ThirdArray = [ThirdView(ThirdViewArray: ["EB 110","Veyron"])] 



} 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return brandArray[section].sectionBrands.count 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as UITableViewCell! 

     cell.textLabel?.text = brandArray[indexPath.section].sectionBrands[indexPath.row] 

     return cell 

    } 

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

     let DestVC = segue.destinationViewController as! CarDetailsVC 

     let indexPath : NSIndexPath = self.tableView.indexPathForSelectedRow! 

     let ThirdAnswerArray : ThirdView 

     ThirdAnswerArray = ThirdArray[indexPath.row] 

     DestVC.brandAnswerArray = ThirdAnswerArray.ThirdViewArray 

     DestVC.FirstString = brandAnswerArray[indexPath.row] 

    } 


    override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return brandArray.count 
    } 

    override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
     return brandArray[section].sectionName 

    } 


} 
    import Foundation 

struct ThirdView { 
    var ThirdViewArray = [String]() 
} 

    class CarDetailsVC: UIViewController { 


     var FirstString = String() 

    var brandAnswerArray = [String]() 






    @IBOutlet var Label: UILabel! 

    override func viewDidLoad() { 

     Label.text = FirstString 

    } 

     override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
      _ = segue.destinationViewController as! CarDetailsVC    
     } 


    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
} 


} 

My ThirdView構造体とCarDetailsVCは別々の.swiftファイルにあります。私に悲しみを与えている

行は次のようになります。

 DestVC.FirstString = brandAnswerArray[indexPath.row] 

P.S.私はこれを行うにした場合:

:最初のオプションだけを選択する際に

DestVC.FirstString = "Hello World" 

たHello Worldが表示され、その後、コードは/アプリケーションは、私はライン上で「範囲外のインデックス」と同じエラーが出る破ります

 ThirdAnswerArray = ThirdArray[indexPath.row] 

答えて

3

この単純な答えは、あなたのbrandAnswerArrayにインデックスindexPath.rowのものを与えるのに十分な値がないことです。つまり、値が5の配列があり、配列[8]を要求すると、インデックス8が存在しないため、アプリケーションがクラッシュします。

具体的には、あなたがセル/行の特定の番号を持っている、あなたのテーブルを言っている:

brandArray [セクション]は0から、何でもbrandArrayに、すべての整数を意味

を.sectionBrands.count [section] .sectionBrands.countは、テーブルがセルを生成するように要求することです。したがって、それはあなたのindexPath.rowが持つことができる範囲です。

BUT:prepareForSegueでは、brandAnswerArray [indexPath.row]にアクセスしています。また、brandAnswerArrayは、要求されたインデックスにあるものを提供するための値が不足しています(別の部分を使用したためテーブルを構築するためのデータ)。

+0

私が言っていることを理解していますが、私のThirdArrayは2つの値で構成され、2つのセルがあります。十分で十分ではないでしょうか?まあ、私はアプリケーションがクラッシュし続けるための答えを知っています。 brandAnswerArrayにどのように値を割り当てるのですか?何が最善の方法でしょうか? – TheNoviceProgrammer

関連する問題