ios - 快速错误线程 1 : EXC_BAD_INSTRUCITON

标签 ios swift compiler-errors crash exc-bad-instruction

嗨,我刚刚学得很快,需要一些帮助。当我运行我的应用程序时它崩溃了。我收到错误

player1 = Player(name: "\(playerNames[0])", hp: 110, attackPwr: 10)

它说:

Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

我尝试将它放在 if 中声明即

if playerNames.count == 2 {
    player1 = Player(name: "\(playerNames[0])", hp: 110, attackPwr: 10)
}

然后加载了我的应用程序,但当我按 player1AttackBtn on 时出现了相同的错误那条线。

@IBAction func player1AttackBtn(sender: AnyObject)

任何帮助将不胜感激!提前致谢!!!

父类

import Foundation

class Character {
    private var _hp: Int = 100
    private var _attackPwr: Int = 10

    var attackPwr: Int  {
        get {
            return _attackPwr
        }
    }

    var hp: Int {
        get {
            return _hp
        }
    }

    var isAlive: Bool {
        get {
            if hp <= 0 {
                return false
            } else {
                return true
            }
        }
    }

    init(startingHp: Int, attackPwr: Int) {
        self._hp = startingHp
        self._attackPwr = attackPwr
    }

    func attemptAttack(attackPwr: Int) -> Bool {
        self._hp -= attackPwr

        return true
    }

}

玩家等级

import Foundation

class Player: Character {
    private var _name = "Player"

    var name: String {
        get {
            return _name
        }
    }

    convenience init(name: String, hp: Int, attackPwr: Int) {
        self.init(startingHp: hp, attackPwr: attackPwr)
        _name = name
    }


}

View Controller

import UIKit
import AVFoundation

//var bgMusicAudio = AVAudioPlayer!
var player1: Player!
var player2: Player!


class ViewController: UIViewController {

    var playerNames = [String]()

    @IBOutlet weak var playerOne: UIImageView!
    @IBOutlet weak var playerTwo: UIImageView!
    @IBOutlet weak var nameLbl: UITextField!
    @IBOutlet weak var textBtn: UIButton!
    @IBOutlet weak var printLbl: UILabel!
    @IBOutlet weak var fightBtn: UIButton!
    @IBOutlet weak var player1Attack: UIButton!
    @IBOutlet weak var player2Attack: UIButton!
    @IBOutlet weak var attackLbl1: UILabel!
    @IBOutlet weak var attackLbl2: UILabel!
    @IBOutlet weak var player1HP: UILabel!
    @IBOutlet weak var player2HP: UILabel!

    var bgMusic = AVAudioPlayer!()

    override func viewDidLoad() {
        super.viewDidLoad()


        player1 = Player(name: "\(playerNames[0])", hp: 110, attackPwr: 10)
        player2 = Player(name: "\(playerNames[1])", hp: 110, attackPwr: 10)

        player1HP.text = "\(player1.hp)"
        player2HP.text = "\(player2.hp)"



        let bgMusicPath = NSBundle.mainBundle().pathForResource("8BitTrack", ofType: "wav")
        let bgMusicURL = NSURL(fileURLWithPath: bgMusicPath!)

        do {
            try bgMusic = AVAudioPlayer(contentsOfURL: bgMusicURL)
            bgMusic.prepareToPlay()

        } catch let err as NSError {
            print(err.debugDescription)
        }

        bgMusic.numberOfLoops = -1
        bgMusic.play()

        printLbl.text = "Player one, what is your name?"

}




    @IBAction func player1AttackBtn(sender: AnyObject) {

        if player2.attemptAttack(player1.attackPwr) {
            printLbl.text = "Attacked \(player2) for \(player1.attackPwr) HP"
            player2HP.text = "\(player2.hp)"

        } else {
            printLbl.text = "Attack was unsuccessful!"
        }

        if !player2.isAlive {
            player2HP.text = ""
            printLbl.text = "\(player1.name) killed \(player2.name)."
            playerTwo.hidden = true            
        } 
    }


    @IBAction func player2AttackBtn(sender: AnyObject) {
    }




    @IBAction func doneBtn(sender: AnyObject) {
        if let name = nameLbl.text {

            playerNames.append(name)

            nameLbl.text = ""

            printLbl.text = "Player two, what is your name?"

            if playerNames.count == 2 {
                nameLbl.hidden = true
                textBtn.hidden = true
                printLbl.text = "Welcome \(playerNames[0]) and \(playerNames[1])"
                fightBtn.hidden = false

            }

        }

    }

    @IBAction func fightBtnPressed(sender: AnyObject) {

        player1Attack.hidden = false
        player2Attack.hidden = false
        attackLbl1.hidden = false
        attackLbl2.hidden = false
        fightBtn.hidden = true
        printLbl.text = "Press attack to attack!"
        player1HP.hidden = false
        player2HP.hidden = false
    }


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

最佳答案

好吧,您在 viewDidLoad 中调用它,但在 @IBAction func didBtn(sender: AnyObject) 中将名称附加到 playerNames 中。当您第一次调用它时(也是唯一一次,因为应用程序崩溃)数组为空。

关于ios - 快速错误线程 1 : EXC_BAD_INSTRUCITON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34606611/

相关文章:

objective-c - 使用边界插入设置 View

ios - 为什么 Xcode 6.3 beta 调试器会显示 Swift NSData 的字节数为 190 但没有属性?

ios - 如何在Swift 3中使用持久化并检索与NSCoding兼容的对象到app文档目录?

ios - 如何在 swift 中禁用/启用位置

ios - iOS 14.2 中的 SwiftUI PageTabView 性能问题滞后

ios - 错误 ITMS-90205 该 bundle 包含不允许的嵌套 bundle podfile

java - 带参数的Java构造函数调用

c++ - VisualStudio优化编译器版本19.00.23506.0中的明显编译错误

ruby - Ocra 在打包脚本时抛出错误

ios - 是什么导致我的 AppDelegate 中的 self 未定义?