Kesalahan SIGABRT di Swift 2

Saya baru-baru ini memperbarui aplikasi saya ke Swift 2, dan mengalami satu kesalahan, yang dapat saya atasi berkat kalian. Dan sekarang, saya mengalami kesalahan kedua, yaitu pada saat runtime, ketika saya menekan satu tombol untuk memutar suara. Ini adalah sinyal kesalahan SIGABRT.

Berikut adalah pesan kesalahan yang saya dapatkan di konsol debug:

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

Selain itu, ini adalah bagian kode yang menimbulkan kesalahan ini, pada baris kedua, tempat kelas dideklarasikan:

 import UIKit

@UIApplicationMain
-> class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

Apa yang terjadi disini? Apa yang saya lewatkan/salah sebutkan? Apa yang perlu saya ubah dalam kode saya agar dapat berjalan kembali. Aplikasi ini sangat sederhana, dan berfungsi selama berbulan-bulan pada versi terakhir Swift. Mengapa sekarang memberi saya kesalahan?

Terima kasih untuk bantuannya.

Berikut ini kode untuk file ViewController.swift saya:

import UIKit

impor AVFoundation impor CoreMotion

kelas 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 sumber
comment
tampilkan kode terkait playMySound   -  person Teja Nandamuri    schedule 25.01.2016
comment
bagaimana tombol itu dibuat?   -  person Teja Nandamuri    schedule 25.01.2016
comment
Kesalahannya mengatakan: Di kelas ViewController metode playMySound: hilang.   -  person vadian    schedule 25.01.2016
comment
Baru saja menambahkan kode file ViewController.swift saya.   -  person Nicholas De Gonzaga Sevilla    schedule 25.01.2016
comment
Komentar lain di aplikasi saya: Saya mendapat satu pesan kesalahan yang mengatakan Semua orientasi antarmuka harus didukung kecuali aplikasi memerlukan layar penuh Aplikasi saya memang memerlukan orientasi Potret, dan merupakan layar penuh. Ini juga merupakan pesan kesalahan baru, jadi apa yang harus saya lakukan untuk menghilangkannya? Saya hanya ingin menghapus seluruh kode dan memulai dari awal. Tapi mungkin saya akan mendapatkan lebih banyak kesalahan.   -  person Nicholas De Gonzaga Sevilla    schedule 25.01.2016
comment
Ada kurung kurawal penutup yang hilang di akhir initYourSound()   -  person vadian    schedule 25.01.2016
comment
Ini adalah kesalahan runtime yang paling umum, dan merupakan pertanyaan umum di Stack Overflow sehingga saya bahkan tidak mau repot-repot memilih duplikatnya. Tolong, di masa depan, cari sebelum bertanya.   -  person matt    schedule 25.01.2016


Jawaban (2)


"pemilih tidak dikenal dikirim ke instance" berarti ada ketidakcocokan antara nama tindakan di "addTarget()" dan nama fungsi yang ingin Anda panggil. Mungkin sesuatu dengan parameter fungsinya.. Sulit untuk mengatakannya tanpa melihat kode apa pun.

action: Selector("playMySound:")

diharapkan menemukan fungsi:

func playMySound(sender: AnyObject?) {};
person Michael    schedule 25.01.2016
comment
Baru saja menambahkan kode file ViewController.swift saya. - person Nicholas De Gonzaga Sevilla; 25.01.2016
comment
Fungsinya ada, saya menambahkan seluruh kode Viewcontroller.swift ke pertanyaan awal saya. Terima kasih - person Nicholas De Gonzaga Sevilla; 25.01.2016
comment
Di mana Anda memanggil fungsinya?? Apakah Anda menggunakan Papan Cerita? - person Michael; 26.01.2016
comment
Saya memanggilnya melalui @IBaction, tetapi tampaknya konversi ke Swift 2 menghapus perintah ini sebelum fungsi tersebut, dan TIDAK mengizinkannya lagi. Ini benar-benar pembaruan yang jelek tidak peduli apa kata orang, ini benar-benar merusak aplikasi yang berfungsi, LOL: IBAction func playMySound(sender: AnyObject) { myPlayer.play() - person Nicholas De Gonzaga Sevilla; 26.01.2016
comment
Saya baru saja menemukan ini, di mana saya harus meletakkan tombol saya HARUS diimplementasikan di dalam kelas. Saya pikir saat ini saya hanya akan memulai dari awal, ini akan memakan waktu lebih sedikit, dan harus (lol benar) membangun aplikasi ini dengan 2 seluk beluk cepat yang benar dan peningkatan baru. Saya melihat perubahannya, dan konversi tersebut mengubah 9 hal atau lebih, yang berarti setidaknya 9 bug atau lebih harus saya perbaiki. Ini bukanlah kemajuan. [tautan]stackoverflow.com/questions/34477470/ - person Nicholas De Gonzaga Sevilla; 26.01.2016

Untuk memudahkan melacak apa yang terjadi, Anda dapat menambahkan titik henti sementara simbolis untuk semua pengecualian. Anda melakukannya di Xcode pada tab "pengecualian" (bagian kiri jendela) dan ketika pengecualian muncul, Xcode berhenti seperti biasa dan Anda mungkin mencari jejak tumpukan. Jika panggilannya sinkron, Anda akan dengan mudah menemukan dan melihat kesalahan Anda.

EDIT: Oh baiklah, sepertinya Anda telah membuat antarmuka pengguna menggunakan file XIB. Kesalahannya mungkin, Anda menghubungkan tindakan tombol di file XIB ke pengontrol tampilan. Jika nanti Anda mengubah tanda tangan metode (parameter, nama, dll.), UIKit tidak dapat menemukan metode tersebut. Buka XIB dan perbaiki kesalahan Anda. ;-)

person Anticro    schedule 25.01.2016
comment
Saya hanya punya satu file XIB, layar peluncuran. Itu tidak berinteraksi dengan apa pun. Antarmuka pengguna hanya satu ViewController. Dan hanya ada dua interaksi di dalamnya: sebuah tombol, yang menyebabkan kesalahan saat menekan SIGABRT, dan sebuah sensor gerak, yang bahkan tidak berfungsi karena tombol tersebut membuat aplikasi mogok. - person Nicholas De Gonzaga Sevilla; 26.01.2016