首页 文章

如何在AVAudioPlayer中从Core Data播放NSData

提问于
浏览
1

我将mp3文件保存为Core Data作为NSData二进制数据 . 然后我在 NSFetchedResultsController 的帮助下加载这个文件 . 然后我写了下面的代码,但我得到了错误 . 我该如何解决?

致命错误:在展开Optional值时意外发现nil

var audioPlayer = AVAudioPlayer()
func play() {
    if musicData != nil {
        audioPlayer = AVAudioPlayer(data: musicData, error: nil)
        AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
        AVAudioSession.sharedInstance().setActive(true, error: nil)
        audioPlayer.prepareToPlay()
        audioPlayer.play()
    }
}

UPDATE 我检查了一下,我看到 AVAudioPlayer 是零,但是我在本课程开始时启动了这个播放器 .

我仍然改变了代码,但我得到了同样的错误第二种方法

var av = AVAudioPlayer()
func play() {
    let object = fetchedResultsController.fetchedObjects?.first as! Entity
    let songData = object.mp3

    var urlData: NSURL!
    songData.writeToURL(urlData, atomically: true)
    av = AVAudioPlayer(contentsOfURL: urlData, error: nil)
    av.prepareToPlay()
    av.play()
}

1 回答

  • 0

    我添加了文件类型提示,它适用于我 .

    func playMusic() {
            let url = NSBundle.mainBundle().URLForResource("Music", withExtension: "mp3")!
            let data = NSData(contentsOfURL: url)!
            AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
            AVAudioSession.sharedInstance().setActive(true, error: nil)
            audioPlayer = AVAudioPlayer(data: data, fileTypeHint: AVFileTypeMPEGLayer3, error: nil)
            audioPlayer.prepareToPlay()
            audioPlayer.play()
        }
    

相关问题