Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 快速错误线程1:EXC_BAD_指令_Ios_Swift_Compiler Errors_Crash_Exc Bad Instruction - Fatal编程技术网

Ios 快速错误线程1:EXC_BAD_指令

Ios 快速错误线程1:EXC_BAD_指令,ios,swift,compiler-errors,crash,exc-bad-instruction,Ios,Swift,Compiler Errors,Crash,Exc Bad Instruction,嗨,我正在学习斯威夫特,我需要一些帮助。当我运行我的应用程序时,它崩溃了。我发现了错误 player1 = Player(name: "\(playerNames[0])", hp: 110, attackPwr: 10) 它说: 线程1:EXC_BAD_指令(代码=EXC_I386_INVOP,子代码=0x0) 我试着把它放在一个if语句中,即 if playerNames.count == 2 { player1 = Player(name: "\(playerNames[0])"

嗨,我正在学习斯威夫特,我需要一些帮助。当我运行我的应用程序时,它崩溃了。我发现了错误

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

线程1:EXC_BAD_指令(代码=EXC_I386_INVOP,子代码=0x0)

我试着把它放在一个
if
语句中,即

if playerNames.count == 2 {
    player1 = Player(name: "\(playerNames[0])", hp: 110, attackPwr: 10)
}
然后加载了我的应用程序,但当我按下player1AttackBtn时,出现了相同的错误 在那一行

@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 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 doneBtn(发送方:AnyObject)
中,您将名称附加到
播放器名称中。当您第一次调用它(也是唯一一次因为应用程序崩溃)时,数组为空

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