2017-10-31 13 views
0
var numberOfPeople = 1 //get from host 
var numberAtCounter = 0 
func showNames() { 

    if peopleInMatch[numberAtCounter] == yourPeerID { //change to peopleinmatcheveryone 

     if numberOfPeople == 0 { 
      print("hoho") 
      personName.isHidden = true 
      connect.isHidden = false 
      connect.setTitle("PRESS READY", for: UIControlState.normal) 
      //change label to ready 
     } else { 
      numberAtCounter += 1 
      numberOfPeople -= 1 // buggy? 
      print("\(numberAtCounter)") 
      showNames() 
     } 


    } else { 
    personName.text = "TAKE PHOTO OF \(peopleInMatch[numberAtCounter])'s COLOR" 
    numberAtCounter += 1 
     if numberOfPeople <= 0 { 
      personName.isHidden = true 
      connect.isHidden = false 
      connect.setTitle("PRESS READY", for: UIControlState.normal) 
      //change label to ready 
     } 
    numberOfPeople -= 1 //buggy maybe fixed 

    } 
} 

if peopleInMatch [numberAtCounter] == yourPeerID行でスレッド1:EXC_BREAKPOINTエラーが発生しました。私は、インデックスがどういう意味であるのか、あるいは潜在的に間違っているのかを完全には理解していませコードは1回実行され、関数はそれ自身を呼び出し、2回目には上記の行を分解します。私はすべての変数をチェックしていますが、どれもnillではありません。何か案は?スウィフトの範囲外のインデックスのインデックスが間違っています

+0

チェック「peopleInMatch」配列サイズを。 peopleInMatch [1]は存在しないようです。 –

+0

'numberAtCounter'が' peopleInMatch'配列のオブジェクトの数以上の場合、 "index out of range"エラーのためにクラッシュします。あなたはそれを避ける必要があります。 – rmaddy

答えて

0

ここでは、あなたの問題が実際にどこにあるかを理解するための簡単な例を示しました。

スクリーンショット1:

enter image description here

numberAtCounterで初めて値が印刷されたために関数が呼び出されたときにすべてが正常に動作します。

ここでは、最初の呼び出しで、0から-1までの値をとるという値を減らしています。それはあなたのpeopleInMatch配列よりも負の値以上の値を取得していないことを確認してください

if peopleInMatch[numberAtCounter] == yourPeerID // here you need to check value of `numberAtCounter` 

:このように2番目の呼び出し内の関数はでラインで呼び出されたとき。したがって

それが負またはカウント以上になった場合は、次のようにあなたが得る結果:

enter image description here

関連する問題