ข้อผิดพลาด SIGABRT ในรวดเร็ว 2

ฉันเพิ่งอัปเดตแอปเป็น 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
// }

} }


person Nicholas De Gonzaga Sevilla    schedule 25.01.2016    source แหล่งที่มา
comment
แสดงรหัสที่เกี่ยวข้องกับ playMySound   -  person Teja Nandamuri    schedule 25.01.2016
comment
ปุ่มถูกสร้างขึ้นมาอย่างไร?   -  person Teja Nandamuri    schedule 25.01.2016
comment
ข้อผิดพลาดแจ้งว่า: ในคลาส ViewController เมธอด playMySound: หายไป   -  person vadian    schedule 25.01.2016
comment
เพิ่งเพิ่มโค้ดของไฟล์ ViewController.swift ของฉัน   -  person Nicholas De Gonzaga Sevilla    schedule 25.01.2016
comment
ความคิดเห็นอื่นในแอปของฉัน: ฉันได้รับข้อความแสดงข้อผิดพลาดหนึ่งข้อความว่า การวางแนวอินเทอร์เฟซทั้งหมดต้องได้รับการสนับสนุน เว้นแต่แอปต้องใช้แบบเต็มหน้าจอ แอปของฉันต้องการการวางแนวในแนวตั้งและเป็นแบบเต็มหน้าจอ นี่เป็นข้อความแสดงข้อผิดพลาดใหม่ด้วย ดังนั้นฉันต้องทำอย่างไรเพื่อกำจัดมัน ฉันแค่อยากจะทิ้งโค้ดทั้งหมดและเริ่มต้นใหม่ทั้งหมด แต่แล้วฉันอาจจะจบลงด้วยข้อผิดพลาดเพิ่มเติม   -  person Nicholas De Gonzaga Sevilla    schedule 25.01.2016
comment
มีเครื่องหมายปีกกาปิดหายไปที่ส่วนท้ายของ initYourSound()   -  person vadian    schedule 25.01.2016
comment
นี่เป็นข้อผิดพลาดรันไทม์ที่พบบ่อยที่สุด และเป็นคำถามทั่วไปเกี่ยวกับ Stack Overflow ซึ่งฉันไม่กล้าแม้แต่จะเลือกรายการที่ซ้ำกัน ในอนาคตกรุณาค้นหาก่อนที่จะถาม   -  person matt    schedule 25.01.2016


คำตอบ (2)


"ตัวเลือกที่ไม่รู้จักส่งไปยังอินสแตนซ์" หมายความว่ามีความไม่ตรงกันระหว่างชื่อการกระทำใน "addTarget()" และชื่อของฟังก์ชันที่คุณต้องการเรียกใช้ อาจเป็นบางอย่างที่มีพารามิเตอร์ของฟังก์ชัน.. มันยากที่จะพูดโดยไม่เห็นโค้ดใด ๆ

action: Selector("playMySound:")

คาดว่าจะพบฟังก์ชัน:

func playMySound(sender: AnyObject?) {};
person Michael    schedule 25.01.2016
comment
เพิ่งเพิ่มโค้ดของไฟล์ ViewController.swift ของฉัน - person Nicholas De Gonzaga Sevilla; 25.01.2016
comment
ฟังก์ชั่นอยู่ที่นั่น ฉันเพิ่มโค้ด Viewcontroller.swift ทั้งหมดลงในคำถามเดิมของฉัน ขอบคุณ - person Nicholas De Gonzaga Sevilla; 25.01.2016
comment
เรียกใช้ฟังก์ชันที่ไหน?? คุณใช้สตอรี่บอร์ดหรือไม่? - person Michael; 26.01.2016
comment
ฉันเรียกมันผ่าน @IBaction แต่เห็นได้ชัดว่าการแปลงเป็น Swift 2 จะลบคำสั่งนี้ก่อนฟังก์ชันและไม่อนุญาตให้อีกต่อไป นี่เป็นการอัปเดตเส็งเคร็งอย่างแท้จริงไม่ว่าใครจะพูดอะไรก็ตาม มันทำให้แอปที่ใช้งานไม่ได้โดยสิ้นเชิง LOL: IBAction func playMySound(sender: AnyObject) { myPlayer.play() - person Nicholas De Gonzaga Sevilla; 26.01.2016
comment
ฉันเพิ่งพบสิ่งนี้ ซึ่งฉันต้องใส่ปุ่ม HAS เพื่อนำไปใช้ในชั้นเรียน ฉันคิดว่า ณ จุดนี้ฉันกำลังจะเริ่มต้นใหม่โดยใช้เวลาน้อยลง และควร (ฮ่าๆ ถูกต้อง) สร้างแอปนี้ด้วย 2 ins outs ที่รวดเร็วที่ถูกต้องและการปรับปรุงใหม่ ฉันดูการเปลี่ยนแปลง และ Conversion ได้เปลี่ยนแปลง 9 รายการขึ้นไป ซึ่งหมายความว่าต้องมีข้อบกพร่องอย่างน้อย 9 รายการขึ้นไปที่ฉันต้องแก้ไข นี่ไม่ใช่ความก้าวหน้า [ลิงก์]stackoverflow.com/questions/34477470/ - person Nicholas De Gonzaga Sevilla; 26.01.2016

เพื่อให้ติดตามสิ่งที่เกิดขึ้นได้ง่ายขึ้น คุณอาจเพิ่มเบรกพอยต์สัญลักษณ์สำหรับข้อยกเว้นทั้งหมด คุณทำเช่นนั้นใน Xcode บนแท็บ "ข้อยกเว้น" (ส่วนด้านซ้ายของหน้าต่าง) และเมื่อมีการส่งข้อยกเว้น Xcode จะหยุดเหมือนปกติและคุณอาจค้นหาการติดตามสแต็ก หากการโทรเป็นแบบซิงโครนัส คุณควรค้นหาและเห็นข้อผิดพลาดของคุณได้อย่างง่ายดาย

แก้ไข: ดูเหมือนว่าคุณจะทำส่วนต่อประสานกับผู้ใช้โดยใช้ไฟล์ XIB ข้อผิดพลาดอาจเกิดขึ้นได้ คุณต่อสายการทำงานของปุ่มในไฟล์ XIB ไปยังตัวควบคุมมุมมอง หากคุณเปลี่ยนลายเซ็นของวิธีการในภายหลัง (พารามิเตอร์ ชื่อ ฯลฯ) UIKit จะไม่พบวิธีการนั้น เปิด XIB และแก้ไขข้อผิดพลาดของคุณ ;-)

person Anticro    schedule 25.01.2016
comment
ฉันมีไฟล์ XIB เพียงไฟล์เดียวเท่านั้น นั่นคือหน้าจอเรียกใช้งาน มันไม่ได้โต้ตอบกับสิ่งใด อินเทอร์เฟซผู้ใช้เป็นเพียง ViewController เดียวเท่านั้น และมีเพียงสองการโต้ตอบเท่านั้น: ปุ่มซึ่งทำให้เกิดข้อผิดพลาดเมื่อกด SIGABRT และเซ็นเซอร์ตรวจจับความเคลื่อนไหวซึ่งไม่ทำงานเนื่องจากปุ่มทำให้แอปขัดข้อง - person Nicholas De Gonzaga Sevilla; 26.01.2016