2015-11-15 2 views
-4

Я создаю таймер обратного отсчета для игры, но я получаю ошибку SIGABRT. Я кодирую в Swift 2. Он обратный отсчет с 45 секунд, затем имеет две другие метки, на 5 секунд меньше, а остальные 10 секунд меньше. Приложение успешно открывается в симуляторе. Как только я нажимаю на экран, он падает. Я попытался удалить все связи между кнопками/наклейками на Storyboard и ViewController.swift. Затем я их «привязал». Кнопка не имеет текста и выше всего. Таким образом, независимо от того, где вы нажимаете на экран, он либо запускается, либо перезагружается. После нажатия кнопки запускается NSTimer. После повторного нажатия кнопки он сбрасывает таймер, чтобы он был готов в следующий раз.Swift 2 - Ошибка Sigabrt

ViewController Код:

// 
// ViewController.swift 
// CS:GO C4 Timer 
// 
// Created by Panja on 11/14/15. 
// Copyright © 2015 Panja. All rights reserved. 
// 

import UIKit 


class ViewController: UIViewController { 

    var Main:Int = 0 
    var Kit:Int = 0 
    var NoKit:Int = 0 

    @IBOutlet weak var MainTime: UILabel! 

    @IBOutlet weak var DiffuseKit: UILabel! 

    @IBOutlet weak var NoDiffuseKit: UILabel! 

    var TimerCount = 0; 
    var TimerRunning = false; 
    var Timer = NSTimer(); 

    var Toggle = false; 

    func Countdown(){ 
     //Time Left Before Bomb Explodes 
     TimerCount = 45; 
     TimerCount -= 1 
     if(TimerCount <= 0){ 
      MainTime.text = "No Time" 
     }else{ 
      MainTime.text = "\(TimerCount)" 
      Main = TimerCount 
     } 
     //Time Left To Diffuse With A Kit 
     Kit = Main - 5 
     if(Kit <= 0){ 
      DiffuseKit.text = "No Time" 
     }else{ 
      DiffuseKit.text = "\(Kit)" 
     } 
     //Time Left To Diffuse Without A Kit 
     NoKit = Main - 10 
     if(NoKit <= 0){ 
      NoDiffuseKit.text = "No Time" 
     }else{ 
      NoDiffuseKit.text = "\(NoKit)" 
     } 
    } 

    @IBAction func ToggleButton(sender: AnyObject) { 
     //If The Button Is At Its Default at 45 Seconds & Not Running 
     if(Toggle == false){ 
      if TimerRunning == false{ 
       Timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("Counting"), userInfo: nil, repeats: true) 
       TimerRunning = true; 
       Toggle = true; 
      } 
     //If Timer is Running & Needs To Be Stopped 
     }else if (Toggle == true){ 
      if TimerRunning == true{ 
       Timer.invalidate() 
       TimerRunning = false 
       TimerCount = 45; 
       MainTime.text = "45" 
       Toggle = false; 
      } 
     } 
    } 



    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

    } 

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

} 

Ошибка С Debug Console:

2015-11-15 12:20:54.288 CS:GO C4 Timer[32688:6460757] -[CS_GO_C4_Timer.ViewController Counting]: unrecognized selector sent to instance 0x7f866bf19d00 
2015-11-15 12:20:54.323 CS:GO C4 Timer[32688:6460757] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CS_GO_C4_Timer.ViewController Counting]: unrecognized selector sent to instance 0x7f866bf19d00' 
*** First throw call stack: 
(
    0 CoreFoundation      0x00000001080849b5 __exceptionPreprocess + 165 
    1 libobjc.A.dylib      0x0000000109c83deb objc_exception_throw + 48 
    2 CoreFoundation      0x000000010808cfdd -[NSObject(NSObject) doesNotRecognizeSelector:] + 205 
    3 CoreFoundation      0x0000000107fda9fa ___forwarding___ + 970 
    4 CoreFoundation      0x0000000107fda5a8 _CF_forwarding_prep_0 + 120 
    5 Foundation       0x000000010846b6f1 __NSFireTimer + 83 
    6 CoreFoundation      0x0000000107fe4de4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20 
    7 CoreFoundation      0x0000000107fe4991 __CFRunLoopDoTimer + 1089 
    8 CoreFoundation      0x0000000107fa6331 __CFRunLoopRun + 1937 
    9 CoreFoundation      0x0000000107fa5918 CFRunLoopRunSpecific + 488 
    10 GraphicsServices     0x000000010c5ccad2 GSEventRunModal + 161 
    11 UIKit        0x00000001088a199e UIApplicationMain + 171 
    12 CS:GO C4 Timer      0x0000000107ea218d main + 109 
    13 libdyld.dylib      0x000000010a7de92d start + 1 
    14 ???         0x0000000000000001 0x0 + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

Main.Storyboard Image of The Main Storyboard

Тема 1 - 12 Main Picture of the Thread 1 file that shows when the application crashes

+4

* Прочитайте * сообщение об ошибке! Вы создаете таймер с помощью 'Selector (« Counting »)', но в вашем коде нет метода «Counting». Возможно, вы имели в виду (спойлер удален)? –

+2

дополнительный downvote для изменения вопроса впоследствии, чтобы ответ, похоже, больше не помогал. Если ваша проблема решена, примите ответ и, в конце концов, опубликуйте второй после ** сначала **, изучая новые проблемы самостоятельно. – luk2302

ответ

1

T проблема в том, что Counting и Countdown - это два разных слова.

+0

Это начинает его и не падает, но таймер только уменьшается на 1, затем замерзает – Fman

+0

. Это другой вопрос. Подсказка: взгляните на то, что происходит с переменной TimerCount в вашей подпрограмме 'Countdown' каждый раз, когда вызывается« Обратный отсчет ». BTW, имена переменных должны начинаться с строчной буквы. – vacawama

+0

Спасибо, это исправило проблему отлично. – Fman