2016-07-24 3 views
0

allKeysにリンクされた約20個のボタンがあります。 turnRedボタンでテキストの色を赤色に変更します。私はturnRedボタンを押すと、私のプログラムがクラッシュし、XcodeのはappDelegateファイルにジャンプし、エラースレッド1でAppDelegateクラスを強調スイフトiOS。ボタンの配列を変更しようとするとプログラムがクラッシュする

@IBOutlet var allKeys: [UIButton]! 


    @IBAction func turnRed(sender: UIButton) { 
     var i = allKeys.count 

     repeat { 
      allKeys[i].setTitleColor(UIColor.redColor(), forState: UIControlState.Normal) 
     i -= 1 
     } while i != -1 
    } 

:信号SIGABRT私は、次のコードを試してみました。

コンソールがキャッチされない例外により「NSRangeException理由にアプリを終了」と言う:NSArrayI objectAtIndex

答えて

2

ここでの問題は、あなたがallKeys.countに変数iを設定しますが、ゼロと迅速なスタートで配列以来されていることである、第二十要素ループがi = 20にあるときに、実際にallKeys[19]でなければなりません。したがって、それはアプリをクラッシュされ、allKeys[20]にアクセスしようとします。これを解決する

一つの方法ではなく、allKeys.count - 1iを設定することですが、より良い方法を用いることであろう0135の代わりにfor-inループ。

for key in allKeys { 
    key.setTitleColor(UIColor.redColor(), forState: UIControlState.Normal) 
} 

Swiftをループするには複数の方法があります。オプションを使用すると効果的です。 の制御フローhereのAppleのマニュアルを参照してください。

+0

ありがとうございました。 – BossGiveMeArrays

+0

@BossGiveMeArraysようこそ! – kabiroberai

関連する問題