我正在尝试在我的程序中实现更改界面的能力,比如主题。我决定使用捆绑包,所以在我的情况下,它们看起来像这样:
- Theme1.bundle
- Theme2.bundle
每个捆绑包都有文件夹:
- Theme1.bundle
- 形象的
- pic1.png
- pic2.png
- 声音
- 声音1.wav
- sound2.wav
- 形象的
因此,我可以使用以下代码从捆绑包中获取任何所需图片的路径:
path = [NSString stringWithFormat:@"%@.bundle/graphic/%@", selectedBundle, imageName];
当我从包中获取图片时没有问题,路径看起来像这样(我使用断点检查它):
Theme1.bundle/graphic/pic1.png并创建UIImage
image = [UIImage imageNamed:path];
图片加载没有任何问题。
但是当我尝试使用 播放声音时AVAudioPlayer
,我以相同的方式获得声音路径,路径如下所示:
Theme1.bundle/sound/sound1.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
我不明白为什么这适用于图片而不适用于声音?
为什么我无法从 bundle 中获得声音?我只能建议一件事 -imageNamed:
做一些工作来找到正确的文件路径而dataWithContentsOfFile:
不是。