2015-12-28 7 views
0

У меня есть функция, которая мигает кнопкой. Функция находится внутри for i loop, которая находится в функции viewDidLoad. У меня также есть NSTimer, который вызывает функцию, периодически повторяющую разные кнопки. Однако, когда я запускаю это, я получаю SIGABRT error. Если вы спросите, я убедился, что соединения с моими кнопками прочные, не отключены.Ошибка SIGABRT при использовании NSTimer, Swift 2 Xcode 7

var computerChoices = [Int](count: 11, repeatedValue: 0) 
var randomIndex = 0 
var pcChoice = 0 
var lit = [b0o,b1o,b2o,b3o,b4o,b5o,b6o,b7o,b8o] 
var litIndex = 0 

override func viewDidLoad() { 
    super.viewDidLoad() 

    for i in 1...10{ 

     print(randomIndex) 
     print(computerChoices) 

     var buttonChoice = lit[randomIndex] 

     randomIndex = Int(arc4random_uniform(UInt32(lit.count))) 
     computerChoices[i] = randomIndex 

     print("yoyoyo") 

     func flashingButtons(){ 
      var one = computerChoices[pcChoice] 
      lit[one].setImage(UIImage(named: "redb.png"), forState: UIControlState.Normal) 
      pcChoice += 1 

     } 
     timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("flashingButtons"), userInfo: nil, repeats: true) 
    } 
} 
+0

В какой строке вы получаете ошибку, возможно в 'computerChoices [i] = randomIndex'? Скорее всего, вы пытаетесь получить доступ к индексу типа коллекции, где соответствующий член не существует. («индекс за пределами границ») – dfri

+0

Как я могу сказать таймеру остановиться в определенное время? –

+0

Является ли этот код в рамках контроллера вида? (Просто убедившись) – dfri

ответ

0

Положить в эксплуатацию функцию flashingButtons с точки зренияDidLoad. Таймер находит функцию и не может найти ее, если она встроена.

override func viewDidLoad() { 
    super.viewDidLoad() 

    for i in 1...10{ 

     print(randomIndex) 
     print(computerChoices) 

     var buttonChoice = lit[randomIndex] 

     randomIndex = Int(arc4random_uniform(UInt32(lit.count))) 
     computerChoices[i] = randomIndex 

     print("yoyoyo") 

     timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("flashingButtons"), userInfo: nil, repeats: true) 
    } 
} 

func flashingButtons(){ 
    var one = computerChoices[pcChoice] 
    lit[one].setImage(UIImage(named: "redb.png"), forState: UIControlState.Normal) 
    pcChoice += 1 

} 
0

Вы должны положить flashingButtons() из стороны viewDidLoad. И в этом вы убедитесь, что out of range не происходит, потому что pcChoice увеличиваются с течением времени.

func flashingButtons(){ 
    var one = computerChoices[pcChoice] 
    lit[one].setImage(UIImage(named: "redb.png"), forState: UIControlState.Normal) 

    if pcChoice >= 10 { 
     pcChoice = 0 
     return 
    } 
    pcChoice += 1 

} 
Смежные вопросы