0

テーマのような、プログラムのインターフェイスを変更する機能を実装しようとしています。バンドルを使用することにしたので、私の場合は次のようになります。

  • 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:ません。

4

1 に答える 1

1

代わりにあなたのコードで

sound = [NSData dataWithContentsOfFile:path];

使用する

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

説明: ImageNamed指定したイメージ名にアプリケーションのパスを添付します

于 2012-06-19T12:24:29.567 に答える