2016-01-25 3 views
0

Недавно я обновил свое приложение до Swift 2, и у меня была одна ошибка, которую я решил благодаря вам, ребята. И теперь у меня есть вторая ошибка, которая во время выполнения, когда я нажимаю одну кнопку, чтобы воспроизвести звук. Это сигнал SIGABRT.Ошибка SIGABRT в swift 2

Вот сообщение об ошибке я получаю в консоли отладки:

2016-01-25 09:16:09.019 WarningShot1.0.0[291:19030] -[WarningShot1_0_0.ViewController playMySound:]: unrecognized selector sent to instance 0x135547d30 
2016-01-25 09:16:09.021 WarningShot1.0.0[291:19030] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[WarningShot1_0_0.ViewController playMySound:]: unrecognized selector sent to instance 0x135547d30' 
*** First throw call stack: 
(0x182835900 0x181ea3f80 0x18283c61c 0x1828395b8 0x18273d68c 0x18755fe50 0x18755fdcc 0x187547a88 0x18755f6e4 0x18755f314 0x187557e30 0x1875284cc 0x187526794 0x1827ecefc 0x1827ec990 0x1827ea690 0x182719680 0x183c28088 0x187590d90 0x10005e2e0 0x1822ba8b8) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

Кроме того, это часть кода, где он бросает эту ошибку, во второй строке, где объявлен класс:

import UIKit 

@UIApplicationMain 
-> class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 

Что здесь происходит? Что мне не хватает/неправильно? Что мне нужно изменить в моем коде, чтобы снова запустить. Это приложение смехотворно прост и много месяцев работает под последней версией Swift. Почему теперь я даю мне ошибки?

Благодарим за помощь.

Вот код для моего ViewController.swift файла:

import UIKit 

импорт AVFoundation импорт CoreMotion

класс ViewController: UIViewController {

var myPlayer = AVAudioPlayer() 

var mySound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("RemSound_01", ofType: "wav")!) 

func initYourSound() { 
    do { 
     try myPlayer = AVAudioPlayer(contentsOfURL: mySound, fileTypeHint: nil) 
    myPlayer.prepareToPlay() 
    // myPlayer.volume = 1.0 // < for setting initial volume, still not perfected. 
    } catch { 
     // handle error 
    } 

var motionManager = CMMotionManager() 

var currentMaxAccelY : Double = 0.0 

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

    //set motion manager properties 
    motionManager.accelerometerUpdateInterval = 0.17 

    //start recording data 
    //  motionManager.startAccelerometerUpdatesToQueue(NSOperationQueue.currentQueue(), withHandler: { 
    //   (accelerometerData: CMAccelerometerData!,error:NSError!) -> Void in 
    //   self.outputAccelerationData(accelerometerData.acceleration) 
    //   if(error != nil) { 
    //    print("\(error)") 
    //   } 
    //  }) 
    motionManager.startAccelerometerUpdatesToQueue(NSOperationQueue.currentQueue()!, withHandler: { 
     (accelerometerData,error) in outputAccelerationData(accelerometerData!.acceleration) 
     if(error != nil) { 
      print("\(error)", terminator: "") 
     } 
    }) 
} 

//func outputAccelerationData(acceleration : CMAcceleration){ 
    // accY?.text = "\(acceleration.y).2fg" 
    //if fabs(acceleration.y) > fabs(currentMaxAccelY) 
    //{ 
    // currentMaxAccelY = acceleration.y 
    //} 
    //  maxAccY?.text = "\(currentMaxAccelY) .2f" 
    //} 

func outputAccelerationData(acceleration : CMAcceleration){ 
    if fabs(acceleration.y) >= 1.25 { 
     myPlayer.play() 
    } 
} 

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

func playMySound(sender: AnyObject) { 
    myPlayer.play() 
} 

// self.resetMaxValues() 
// @IBOutlet var accY: UILabel! 
// @IBOutlet var maxAccY: UILabel! 

// @IBAction func resetMaxValues() { 
// currentMaxAccelY = 0 
// } 

}}

+0

показать код, связанный с игройMySound –

+0

Как создать кнопку? –

+2

Ошибка говорит: В классе 'ViewController' отсутствует метод' playMySound: '. – vadian

ответ

0

«непризнанный селектор, отправленный в экземпляр "означает, что существует несоответствие между именем действия в" addTarget() "и именем функции, которую вы хотите вызвать. Возможно, что-то с параметрами функции. Трудно сказать, не видя никакого кода.

action: Selector("playMySound:") 

бы ожидать, чтобы найти функцию:

func playMySound(sender: AnyObject?) {}; 
+0

Просто добавил код моего файла ViewController.swift. –

+0

Функция есть, я добавил весь код Viewcontroller.swift в свой исходный вопрос. Спасибо –

+0

Где вы называете функцию? Вы используете раскадровку? – Michael

0

Для облегчения дорожки, что происходит, вы можете добавить символическую точку останова для всех исключений. Вы делаете это в Xcode на вкладке «exceptions» (левая часть окна), и когда генерируется исключение, Xcode останавливается, как обычно, и вы можете искать трассировку стека. Если вызов синхронный, вы должны легко найти и увидеть свою ошибку.

EDIT: Ну, вы, кажется, сделали пользовательский интерфейс, используя XIB-файл. Ошибка в том, что вы связали действие кнопки в файле XIB с контроллером представления. Если позже вы измените подпись метода (параметр, имя и т. Д.), UIKit не сможет найти метод. Откройте XIB и исправьте ошибку. ;-)

+0

У меня только один XIB файл, экран запуска. Он ничего не взаимодействует. Пользовательский интерфейс - это только один ViewController. И в нем есть только два взаимодействия: кнопка, вызывающая ошибку при нажатии SIGABRT, и датчик движения, который даже не работает, так как кнопка вылетает из приложения. –