Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将iOS应用程序音频文件应用程序存储在xcassets或documents目录中?_Ios_Audio_Avfoundation_Nsdocumentdirectory_Xcasset - Fatal编程技术网

将iOS应用程序音频文件应用程序存储在xcassets或documents目录中?

将iOS应用程序音频文件应用程序存储在xcassets或documents目录中?,ios,audio,avfoundation,nsdocumentdirectory,xcasset,Ios,Audio,Avfoundation,Nsdocumentdirectory,Xcasset,如果一个应用程序需要数百个音频文件(它们很小,5-25KB),那么最好将它们放在资产目录还是文档目录中?我尝试过这两种方法,它们似乎没有太大的不同,在project navigator中管理数百个文件都是一件痛苦的事情,而且两者的应用程序文件大小都是一样的。因为您希望将音频文件与应用程序捆绑在一起,所以无法使用Documents文件夹。使用Documents文件夹是一项运行时功能,而不是仅在从应用商店安装应用并由用户运行后才能使用 要将文件包含在应用程序中以便立即存在,这些文件必须是应用程序资源

如果一个应用程序需要数百个音频文件(它们很小,5-25KB),那么最好将它们放在资产目录还是文档目录中?我尝试过这两种方法,它们似乎没有太大的不同,在project navigator中管理数百个文件都是一件痛苦的事情,而且两者的应用程序文件大小都是一样的。

因为您希望将音频文件与应用程序捆绑在一起,所以无法使用Documents文件夹。使用Documents文件夹是一项运行时功能,而不是仅在从应用商店安装应用并由用户运行后才能使用


要将文件包含在应用程序中以便立即存在,这些文件必须是应用程序资源包的一部分。您是使用资产目录还是将它们简单地存储在捆绑包中取决于您,但无法将它们打包到Documents文件夹中,因为在用户第一次运行应用程序之前,没有Documents文件夹。

到目前为止,我发现一件事会影响是否“只是”将音频文件放入应用程序包或将其放入应用程序包的资产目录部分

将音频文件放入资产目录时,它可以作为数据使用,没有URL。正如我现在所理解的,如果你想要一个URL,你必须提取数据并创建一个文件,这是双重工作

当你有一个URL,当你“只是”把音频文件放入应用程序包时,它会自动提供给你更多的选择。比如将AVQueuePlayer与AVPlayerItem一起使用。AVPlayerItem只接受URL,不接受数据。如果您想从资产目录中一个接一个地播放音频文件,那么需要做更多的工作,您必须为AVAudioPlayerDelegate编写代码,而使用AVQueuePlayer,您只需提供一个AVPlayerItems数组


我怀疑有URL可供参考可能会有更多的优势,但我还没有看到资产目录所具有的优势,因此我的观点可能会发生变化。

这些文件是否是您希望在应用程序中包含的,以便在用户首次安装应用程序时将其放置到位?或者,这些文件是用户首次运行应用程序时应用程序下载的?您确定是指文档目录吗?这是应用程序第一次启动时创建的空读/写目录。资产目录是只读的,其内容存储在应用程序包中。如果这些声音文件随应用程序一起提供,则您必须将它们从捆绑包中复制到文档目录中(如果您想保存它们)。@rmaddy,这些文件随应用程序一起提供。@duncac,我不确定我是否理解,我能够在iPhone上播放目录中的音频文件,因此,我假设应用程序中已经存在文件副本。如果您将文件从捆绑包复制到documents目录,这不是重复吗?这是我的观点。您无法发布内容已在documents目录中的应用程序。如果您希望将声音文件保存在文档目录中,则必须从捆绑包中的某个位置(资产目录或捆绑包中的文件夹)下载或复制声音文件。这意味着声音文件将位于两个位置。因此,我认为说“我应该将我的声音文件存储在资产目录或文档目录中”是没有意义的,因为它们不是等效的。我的错误是,出于某种原因,我认为当我将音频文件复制到project navigator时,它在文档目录中创建了文件。这是捆绑的一部分。那么捆绑包和目录中有什么区别呢?