我正在使用AVQueuePlayer
播放我已添加到Xcode项目中的本地音频文件,方法是将.mp3文件拖放到项目导航器窗格中的我的文件夹中。然后我使用此代码搜索我的文件并提取我想要的文件,然后我用它来填充表格视图并创建AVPlayerItems
以便在我的AVQueuePlayer
中播放。
当我在模拟器上运行应用程序时,我的代码工作正常但是当我在iPhone上运行应用程序时,会发生错误并返回
致命错误:在解包可选值时意外发现nil
以下是导致问题的代码......
var songNameArray: Array<String> = [String]()
let fileManager = NSFileManager.defaultManager()
let enumerator:NSDirectoryEnumerator = fileManager.enumeratorAtPath("/Users/UsersName/Desktop/Xcode Projects Folder/LocalAudioFilePlayer/LocalAudioFilePlayer")!
while let element = enumerator.nextObject() as? String {
if element.hasSuffix("mp3") {
songNameArray.append(element)
print(element)
}
}
文件是否未正确复制到捆绑包中然后部署到iPhone?如果是这样,添加音频文件的正确方法是什么?
我也试过了......
var songNameArray: Array<String> = [String]()
let path = String(NSBundle.mainBundle().resourcePath)
let songFiles = try! NSFileManager.defaultManager().contentsOfDirectoryAtPath(path)
for item in songFiles {
if item.hasSuffix("mp3"){
songNameArray.append(item)
print("appended to songNameArray \(item)")
}
}
但是我收到了错误
文件夹“LocalAudioFilePlayer.app”)“不存在
非常感谢任何帮助
答案 0 :(得分:1)
您是否选择了#34;如果需要,复制文件&#34;然后将mp3拖入Project?
尝试按以下方式加载文件:
let path = NSBundle.mainBundle().pathForResource("filename", ofType: "ext")
let url = NSURL.fileURLWithPath(path!)
var audioPlayer: AVAudioPlayer?
do {
try audioPlayer = AVAudioPlayer(contentsOfURL: url)
} catch {
print("Unable to load file")
}
注意:此处仅使用文件名,而不是整个路径。
答案 1 :(得分:1)
听起来您还没有在Xcode项目中将声音文件添加到目标中。如果他们不属于&#34;对于一个目标,他们不会被复制到&#34;资源&#34;建设期间的文件夹。
选择要在项目导航器中使用的声音文件,并检查文件检查器(view-&gt; Utilities-&gt; File Inspector,并确保在&#34;目标成员资格&#下选择了适当的目标34。
编辑:在这种情况下,这绝对不是问题。留下这个答案,因为它可能对遇到类似问题的其他人有用。
答案 2 :(得分:1)
let path = String(NSBundle.mainBundle().resourcePath)
这条线没有做你想象的那样。 NSBundle.mainBundle().resourcePath
返回String?
,这是一种可选类型。当你通过在它周围包裹String()来创建一个字符串时,不会打开可选项,它会创建一个字符串描述可选的,看起来像这样:
Optional("/Users/markbes/Library/Developer/CoreSimulator/Devices/18D62628-5F8A-4277-9045-C6DE740078CA/data/Containers/Bundle/Application/3DDC064C-0DD1-4BE9-8EA4-C151B65ED1E1/Resources.app")
你想要什么更像是
var path = NSBundle.mainBundle().resourcePath!
打开字符串?键入,并为您提供一个字符串(或抛出错误)。