swift 2中的SIGABRT错误

时间:2016-01-25 17:38:54

标签: ios swift2 sigabrt

我最近将我的应用更新为Swift 2,并且出现了一个错误,感谢你们,我解决了这个错误。 而现在,当我按下一个按钮播放声音时,我有第二个错误,即在运行时。这是信号SIGABRT错误。

以下是我在调试控制台中收到的错误消息:

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
// }

} }

2 个答案:

答案 0 :(得分:0)

“无法识别的选择器发送到实例”意味着“addTarget()”中的action-name与您要调用的函数的名称不匹配。可能是功能参数的东西..没有看到任何代码很难说。

action: Selector("playMySound:")

期望找到一个函数:

func playMySound(sender: AnyObject?) {};

答案 1 :(得分:0)

为了更轻松地跟踪发生的情况,您可以为所有异常添加符号断点。你可以在“异常”选项卡(窗口左侧)的Xcode中执行此操作,并且当抛出异常时,Xcode会像往常一样停止,您可能会查找堆栈跟踪。如果呼叫是同步的,你应该很容易找到并看到你的错误。

编辑:哦,你似乎已经使用XIB文件完成了用户界面。错误可能是,您将XIB文件中的按钮操作连接到视图控制器。如果您以后更改方法的签名(参数,名称等),UIKit无法找到该方法。打开XIB并修复错误。 ; - )