捆绑子目录访问



我正在尝试实现在我的程序中更改界面的能力,例如主题。我决定使用捆绑包,所以在我的情况下它们看起来像这样:

  • 主题1.捆绑
  • 主题2.捆绑

每个捆绑包都有文件夹:

  • 主题1.捆绑包
    • 图形
      • 图1.png
      • 图2.png
    • 声音
      • 声音1.wav
      • 声音2.wav

因此,我可以使用此代码从捆绑包中获取任何所需图片的路径:

path = [NSString stringWithFormat:@"%@.bundle/graphic/%@", selectedBundle, imageName];

当我从捆绑包中获取图片时没有问题,路径如下所示(我使用断点检查它):Theme1.bundle/graphic/pic1.png我创建UIImage

image = [UIImage imageNamed:path];

图片加载没有任何问题。
但是当我尝试使用 AVAudioPlayer 播放声音时,我以相同的方式获得声音路径,路径如下所示:主题1.捆绑/声音/声音1.wav,但是当我尝试创建NSData时

sound = [NSData dataWithContentsOfFile:path];

它未初始化。
当我尝试将声音保留在主捆绑包中并获取它时

path = [[NSBundle mainBundle] pathForResource:@"sound1" ofType:@"wav"];

一切都很好,路径看起来像这样
/var/mobile/Applications/E8313E88-CE05-44B2-A80C-B05331D8596F/Myapp.app/sound1.wav

我不明白为什么这适用于图片而不是声音?
为什么我无法从捆绑包中获取声音?我只能建议一件事 - imageNamed:做一些工作来找到正确的文件路径,而dataWithContentsOfFile:没有。

在你的代码中而不是

sound = [NSData dataWithContentsOfFile:path];

NSString * path = [NSString stringWithFormat:@"%@.bundle/sounds/%@", selectedBundle, soundName]; 
NSString *fullPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:path];
sound = [NSData dataWithContentsOfFile:path];

解释: ImageNamed将应用程序的路径附加到指定的映像名称

最新更新