【发布时间】:2016-03-25 20:37:49
【问题描述】:
首先,我只是想让你知道我是 iOS 编程的新手 ;)
我想知道以下情况是否可行,或者我需要以哪种方式更新我的代码以使其工作。 我想播放位于 ViewController 文件 内的播放器类文件 中的音频文件。 我将文件“test.wav”添加到项目的根目录。
我的问题
当我通过点击按钮播放声音时,程序找不到声音文件。我有以下错误消息: 致命错误:在展开可选值时意外发现 nil (lldb)
主 swift 文件:ViewController.swift
import UIKit
import AVFoundation
class ViewController: UIViewController {
var player1: Player!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func playAudio(sender: AnyObject) {
player1.playAudioFile()
}
}
类文件:Player.swift
import Foundation
import AVFoundation
class Player {
// Variables
var vc: ViewController!
var audioFile: AVAudioPlayer!
// Initializer
init (){
}
// Methods
func playAudioFile() {
if audioFile.playing {
audioFile.stop()
} else {
audioFile.play()
}
}
// Intialize ViewController
init (vc:ViewController!) {
// Set path for the attack sound
let audioSnd = NSBundle.mainBundle().pathForResource("test", ofType: "wav")
let audioFileURL = NSURL(fileURLWithPath: audioSnd!)
do {
try audioFile = AVAudioPlayer(contentsOfURL: audioFileURL, fileTypeHint: nil)
audioFile.prepareToPlay()
} catch let err as NSError {
print(err.debugDescription)
}
}
}
更多信息
我的程序有一个“Player”类,还有“Human”和“Monster”等子类。 默认情况下,我的班级播放器有一些用于攻击、死亡等的音频文件。 在某些情况下,“玩家”可以变成人类或怪物,并获得自定义的攻击和死亡声音。
非常感谢您的帮助! ;)
【问题讨论】:
-
你没有初始化播放器变量。添加:
player1 = Player(self)到viewDidLoad -
其实Player类的原代码比较完整。例如:init (name: String){ self._name = name self._fighterSpr = UIImage (named: "unknown")!但是我遇到了同样的问题,无论如何...... :)
-
非常感谢德扬,我搞定了。我将更新我的代码,以便我可以在 viewDidLoad 中以这种方式声明 player1。