为什么我添加到 xcode 项目的音频文件在模拟器中可用,但在 iPhone 上部署应用程序时却不可用
Why are the audio files I've added to my xcode project available in the simulator but are not available when i deploy the app on iPhone
我正在使用 AVQueuePlayer
播放本地音频文件,这些文件是我通过将 .mp3 文件拖放到项目导航器窗格中的文件夹中添加到我的 Xcode 项目中的。然后我使用这段代码搜索我的文件并提取我想要的文件,然后我用它来填充 table 视图并创建 AVPlayerItems
以便在我的 AVQueuePlayer
中播放。
当我 运行 模拟器上的应用程序时,我的代码工作正常,但是当我 运行 我的 iPhone 上的应用程序时,出现错误并且 returns
fatal error: unexpectedly found nil while unwrapping an Optional value
这是导致问题的代码...
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)")
}
}
但是我收到错误
The folder “LocalAudioFilePlayer.app")” doesn’t exist
非常感谢任何帮助
你 select "Copy files if needed" 然后将 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")
}
注意:这里只使用文件名,而不是整个路径。
听起来您还没有将声音文件添加到 Xcode 项目中的目标。如果他们不 "belong" 到目标,他们将不会在构建过程中被复制到 "resources" 文件夹中。
Select 在项目导航器中选择要使用的声音文件,并检查文件检查器(视图->实用程序->文件检查器,并确保在 [=18 下选择了适当的目标=].
编辑:在这种情况下这绝对不是问题所在。留下这个答案,因为它可能对其他人有用 运行 进入类似的问题。
let path = String(NSBundle.mainBundle().resourcePath)
这条线并没有按照您的想象行事。 NSBundle.mainBundle().resourcePath
returns 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!
解开字符串?输入,然后给你一个字符串(或抛出一个错误)。
我正在使用 AVQueuePlayer
播放本地音频文件,这些文件是我通过将 .mp3 文件拖放到项目导航器窗格中的文件夹中添加到我的 Xcode 项目中的。然后我使用这段代码搜索我的文件并提取我想要的文件,然后我用它来填充 table 视图并创建 AVPlayerItems
以便在我的 AVQueuePlayer
中播放。
当我 运行 模拟器上的应用程序时,我的代码工作正常,但是当我 运行 我的 iPhone 上的应用程序时,出现错误并且 returns
fatal error: unexpectedly found nil while unwrapping an Optional value
这是导致问题的代码...
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)")
}
}
但是我收到错误
The folder “LocalAudioFilePlayer.app")” doesn’t exist
非常感谢任何帮助
你 select "Copy files if needed" 然后将 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")
}
注意:这里只使用文件名,而不是整个路径。
听起来您还没有将声音文件添加到 Xcode 项目中的目标。如果他们不 "belong" 到目标,他们将不会在构建过程中被复制到 "resources" 文件夹中。
Select 在项目导航器中选择要使用的声音文件,并检查文件检查器(视图->实用程序->文件检查器,并确保在 [=18 下选择了适当的目标=].
编辑:在这种情况下这绝对不是问题所在。留下这个答案,因为它可能对其他人有用 运行 进入类似的问题。
let path = String(NSBundle.mainBundle().resourcePath)
这条线并没有按照您的想象行事。 NSBundle.mainBundle().resourcePath
returns 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!
解开字符串?输入,然后给你一个字符串(或抛出一个错误)。