テーマのような、プログラムのインターフェイスを変更する機能を実装しようとしています。バンドルを使用することにしたので、私の場合は次のようになります。
- Theme1.bundle
- Theme2.bundle
すべてのバンドルにはフォルダーがあります。
- Theme1.bundle
- グラフィック
- pic1.png
- pic2.png
- 音
- サウンド1.wav
- サウンド2.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
なぜこれが写真では機能するのに音声では機能しないのか理解できませんか?
バンドルからサウンドを取得できないのはなぜですか? 私が提案できることは1つだけです-imageNamed:
ファイルへの正しいパスを見つけるためにいくつかの作業を行いますが、そうではありdataWithContentsOfFile:
ません。