获取位于 Assets.xcassets 的数据集中文件的路径

Posted

技术标签:

【中文标题】获取位于 Assets.xcassets 的数据集中文件的路径【英文标题】:Get path of a file in a data set located in Assets.xcassets 【发布时间】:2016-12-13 19:37:57 【问题描述】:

我的Assets.xcassets 中有一个音频文件数据集:

我正在尝试获取其中一个音频文件的路径,如下所示:

let path: String = Bundle.main.path(forResource: "acoustic_grand_piano/A4", ofType: "f32")!

但我得到了EXC_BAD_INSTRUCTION。我试图在互联网上查找,但在数据集上没有找到任何内容。

如何获取这些文件之一的内容?

谢谢!

【问题讨论】:

见:***.com/a/39891180/1457385 【参考方案1】:

试试这个:

手动将文件放入文件夹中,可以任意命名。 将“.bundle”附加到文件夹以创建捆绑包。你会得到一个警告,接受它。恭喜,您刚刚创建了您的第一个捆绑包! :-) 手动将该文件夹拖到您的应用中。

使用以下代码获取您的文件....

public func returnFile(_ named:String) -> String 
    let path: String = Bundle.main.path(forResource: "myAudioFiles", ofType: "bundle")! + "/" + name + ".f32"        
    do 
        return try String(contentsOfFile: path)
    
    catch let error as NSError 
        return error.description
    

现在,我的文件是 CIKernel 代码的文本文件。由于您的文件是音频文件,您可能需要将字符串返回更改为其他内容。

编辑:

就我而言,我使用的是框架,因为我希望与扩展程序和其他应用程序共享这些文件/图像。如果您在这样的设置中工作,这里是未更改的代码:

public func returnFile(_ resource:String, _ fileName:String, _ fileType:String) -> String 
    let identifier = "com.companyname.appname" // replace with framework bundle identifier
    let fileBundle = Bundle.init(identifier: identifier)
    let filePath = (fileBundle?.path(forResource: resource, ofType: "bundle"))! + "/" + fileName + "." + fileType
do 
    return try String(contentsOfFile: filePath)

catch let error as NSError 
    return error.description

【讨论】:

以上是关于获取位于 Assets.xcassets 的数据集中文件的路径的主要内容,如果未能解决你的问题,请参考以下文章

Apple watch 多个 Assets.xcassets 文件夹的用途

从 Assets.xcassets 加载视频

使用“Assets.xcassets”中的图像文件以编程方式更改 iOS 应用程序图标

Swift 3.0 图像集

Assets.xcassets - 通用不工作

Cocoapods:包含资源文件夹 Assets.xcassets 的 pod 出现问题