質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.35%

  • Swift

    9425questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • Xcode

    5302questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • iOS

    4958questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Array index out of rangeというエラーが解決できない

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 3,469

yuma

score 11

こんにちは。swift初心者の者です。
いま、簡単な4択クイズアプリを作っているのですが、次の問題を表示する関数(以下のコードのnextProblemという関数です)のところで、Array index out of rangeとエラーが出てしまいます。
どのあたりを直せばいいのでしょうか。
教えていただきたいです。

import UIKit

class subViewController: UIViewController {

    @IBOutlet weak var mylabel: UILabel!
    @IBOutlet weak var mytext: UITextView!
    @IBOutlet weak var mybutton1: UIButton!
    @IBOutlet weak var mybutton2: UIButton!
    @IBOutlet weak var mybutton3: UIButton!
    @IBOutlet weak var mybutton4: UIButton!
    @IBOutlet weak var myimage: UIImageView!
    
    let csvArray = [String]()
    var mondaiArray = [String]()
    var mondaiCount = 0
    var correct = 0
    var correctCount = 0
    let total = 10
    
    override func viewDidLoad() {
        super.viewDidLoad()

        let csvBundle = NSBundle.mainBundle().pathForResource("mondai", ofType: "csv")
        
        var encodingError:NSError? = nil
        
        let csvData = NSString(contentsOfFile: csvBundle!, encoding: NSUTF8StringEncoding, error: &encodingError)!
        
        let lineChange = csvData.stringByReplacingOccurrencesOfString("\r", withString: "\n")
        
        let csvArray:Array = lineChange.componentsSeparatedByString("\n")
        
        mondaiArray = csvArray[mondaiCount].componentsSeparatedByString(",")
        
        mylabel.text = "第\(mondaiCount+1)問"
        
        mytext.text = mondaiArray[0]
        mybutton1.setTitle(mondaiArray[2], forState: .Normal)
        mybutton2.setTitle(mondaiArray[3], forState: .Normal)
        mybutton3.setTitle(mondaiArray[4], forState: .Normal)
        mybutton4.setTitle(mondaiArray[5], forState: .Normal)
        
    }
    
    func nextProblem(){
        
        mondaiCount++
        mondaiArray.removeAll(keepCapacity: true)
        mondaiArray = csvArray[mondaiCount].componentsSeparatedByString(",")
        mylabel.text = "第\(mondaiCount+1)問"
        mytext.text = mondaiArray[0]
        mybutton1.setTitle(mondaiArray[2], forState: .Normal)
        mybutton2.setTitle(mondaiArray[3], forState: .Normal)
        mybutton3.setTitle(mondaiArray[4], forState: .Normal)
        mybutton4.setTitle(mondaiArray[5], forState: .Normal)
        
    }
    
    
    @IBAction func btnAction(sender: UIButton){
        if sender.tag == mondaiArray[1].toInt(){
            myimage.image = UIImage(named: "maru.gif")!
            correctCount++
        }else{
            myimage.image = UIImage(named: "batu.png")!
        }
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
}


  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

インスタンス変数のcsvArrayが空の配列になっています。
csvArrayの初期化処理を見直してください。


投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/08/09 16:57

    初期化処理とはどのようにやればいいのでしょうか…。
    無知ですみません。

    キャンセル

  • 2015/08/09 17:02

    class subViewController: UIViewController {
    var csvArray = [String]()
    override func viewDidLoad() {
    csvArray = lineChange.componentsSeparatedByString("\n")
    }
    }

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Swift

    9425questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • Xcode

    5302questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • iOS

    4958questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。