2012-04-30 8 views
2

我々はファイルのパスを取得するには、このような長い道のりを使用する必要があることを少し奇妙に思える:iOSでは、mainBundleリソースのURLを簡単に取得できますか?

NSURL *soundURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] 
              pathForResource:@"0" ofType:@"aiff"]]; 

私は不思議なNSURLNSBundleためのクラスメソッドとしてより高速な方法は、ありますか?

NSURL *soundURL = [NSURL urlFromMainBundle:@"0.aiff"]; 

または

NSURL *soundURL = [NSBundle urlFromMainBundle:@"0.aiff"]; 

ない場合は、それが良いフォームではありません理由はありますか?

答えて

5

方法について:そこから始めて、あなたもNSURLNSBundleのカテゴリを書くことができ

NSURL *url = [[NSBundle mainBundle] URLForResource:@"0" withExtension:@"aiff"]; 

@interface NSURL (NSURL+Resource) 
+ (NSURL *)URLForResource:(NSString *)resource; 
@end 

@implementation NSURL (NSURL+Resource) 

+ (NSURL *)URLForResource:(NSString *)resource 
{ 
    NSString *name = [resource stringByDeletingPathExtension]; 
    NSString *extension = [resource pathExtension]; 

    return [[NSBundle mainBundle] URLForResource:name withExtension:extension]; 
} 

@end 
+0

いいです、ありがとうございます。そして、そのクラスメソッドを 'NSURL'にどのように追加できますか? (フレームワークの '.h'と' .m'ファイルに追加しますか?後でXcodeをインストールした別のMacでプロジェクトをコンパイルするとどうなりますか? –

+1

Uhm、いいえ、あなたは 'NSURL'でカテゴリを作成します。フレームワークファイルを使っていない( '.mファイルがなく、' .h'ファイルも読み込み専用です)、カテゴリとして書く方法については私の編集を参照してください。 – JustSid

1

あなたはNSBundleクラスでURLForResource:withExtension:を使用することができます。

NSURL *soundURL = [[NSBundle mainBundle]URLForResource:@"0" withExtension:@"aiff"]; 
1

お試しください:

NSURL *soundURL = [[NSBundle mainBundle]URLForResource:@"0" withExtension:@"aiff"]; 
関連する問題