我正在使用Swift 4,Xcode 9 Beta 6中的一个简单游戏,尝试从同一个URL多次加载音频文件时出错。让我告诉你我的意思;我有一个看起来有点像这样的代码。
guard let url = Bundle.main.url(forResource: soundName, withExtension: ext) else {
return nil
}
do {
player = try AVAudioPlayer(contentsOf: url)
player.prepareToPlay()
} catch let error {
print("Could not create AVAudioPlayer with url: \(url.absoluteString)")
return nil
print("Error: \(error.localizedDescription")
}
注意:soundName
和ext
是String
个对象,组成本地音频文件的名称。 player
是AVAudioPlayer类型的属性。
游戏使用此代码创建声音,该代码首先完美运行,但过了一段时间,它变得懒惰,player = try AVAudioPlayer(contentsOf: url)
失败并打印:
Could not create AVAudioPlayer with url: url here
Error: The operation couldn't be completed. (NSOSStatusErrorDomain error -42.)
任何人都有任何想法?
编辑1:
我使用let data = try Data(contentsOf: url)
将URL的内容加载到Data对象中,这似乎解决了这个问题。我没有解决它,因为我仍然想知道使用一个URL有什么问题,以及为什么它在多次加载相同的URL后停止工作。另外,首先将内容加载到二进制Data对象中可能需要更多资源和时间吗?