9

iPhoneプログラミング初心者です。Resource フォルダーのサブフォルダーにあるテキスト ファイルの内容を読みたいと思います。

リソース フォルダーの構造は次のとおりです。

リソース

  1. Folder1---->Data.txt
  2. Folder2---->Data.txt
  3. Folder3---->Folder1---->Data.txt

「Data.txt」という名前のファイルが複数ありますが、各フォルダ内のファイルにアクセスするにはどうすればよいですか? テキスト ファイルの読み方は知っていますが、リソース構造が上記の構造に似ている場合、どうすればパスを取得できますか?

たとえば、Folder3 から「Data.txt」ファイルにアクセスしたい場合、ファイル パスを取得するにはどうすればよいですか?

提案してください。

4

4 に答える 4

16

「リソースフォルダーは、実際にはアプリケーション バンドルとも呼ばれるメイン バンドルの内容です。pathForResource:ofType:またはを使用pathForResource:ofType:inDirectory:して、リソースのフル パスを取得します。

ファイルの内容を文字列としてロードするには、保持された文字列が必要な場合stringWithContentsOfFile:encoding:error:は with の autoreleased string のメソッドを使用します。initWithContentsOfFile:encoding:error:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Data" 
                                                     ofType:@"txt"
                                                inDirectory:@"Folder1"];
if (filePath != nil) {
  theContents = [NSString stringWithContentsOfFile:filePath
                                          encoding:NSUTF8StringEncoding
                                             error:NULL];
  // Do stuff to theContents
}

これは、以前に Shirkrin が示した回答とほぼ同じですが、ターゲットに対して機能するというわずかな違いがあります。これはinitWithContentsOfFile:、Mac OS X では非推奨であり、iPhone OS ではまったく使用できないためです。

于 2009-09-30T09:06:32.427 に答える
12

精神病の回答を続けるには、完全な例は次のようになります。

NSBundle *thisBundle = [NSBundle bundleForClass:[self class]];
NSString *filePath = nil;

if (filePath = [thisBundle pathForResource:@"Data" ofType:@"txt" inDirectory:@"Folder1"])  {

    theContents = [[NSString alloc] initWithContentsOfFile:filePath];

    // when completed, it is the developer's responsibility to release theContents

}

-pathForResource:ofType:inDirectory を使用して、サブディレクトリ内のリソースにアクセスできることに注意してください。

于 2009-09-30T06:47:49.073 に答える
8

上記の Shirkrin の回答PeyloW の回答はどちらも役に立ち、pathForResource:ofType:inDirectory:アプリ バンドル内の別のフォルダーにある同じ名前のファイルにアクセスすることができました。

また、ここで私の要件に少し適した代替ソリューションを見つけたので、それを共有したいと思いました. 特に、このリンクを参照してください。

たとえば、次のフォルダー参照があるとします (青いアイコン、グループは黄色)。

ここに画像の説明を入力

次に、次のように画像ファイルにアクセスできます。

NSString * filePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"pin_images/1/2.jpg"];
UIImage * image = [UIImage imageWithContentsOfFile:filePath];

補足として、pathForResource:ofType:inDirectory:同等のものは次のようになります。

NSString * filePath = [[NSBundle mainBundle] pathForResource:@"2" ofType:@"jpg" inDirectory:@"pin_images/1/"];
于 2013-08-09T06:56:14.520 に答える
4
    NSBundle* bundle = [NSBundle mainBundle];
    NSString* path = [bundle bundlePath];

これにより、バンドルへのパスが得られます。そこから、フォルダー構造をナビゲートできます。

于 2009-09-30T06:24:21.883 に答える