web-dev-qa-db-ja.com

iPhoneアプリでファイルパスを取得する方法

アプリ内のファイルへのアクセスに問題があります。

現在使用しています

//Directly from TileMap example from WWDC2010
NSString *tileDirectory = [[[NSBundle mainBundle] resourcePath] 
                           stringByAppendingPathComponent:@"Tiles"];

MKOverlayのタイルにアクセスします。これは私にこのディレクトリを与えます

/ Users/xxxx/Library/Application Support/iPhone Simulator/4.2/Applications/9D62025C-C53B-472C-8309-xxxx/xxxx.app/Tiles

xはプライバシー上の理由のみです

Tilesグループに直接あるTilesというグループのXcodeにあるアプリケーションのルートにあるResourcesというフォルダーにタイルがあります。

アプリを実行すると、生成されたディレクトリでタイルが見つからないという簡単なエラーが表示されます(上記の引用符)。そのコードを置き換えて作成すると、次のようになります。

NSString *tileDirectory = @"/Users/xxxx/Documents/xxxx/Tiles";

その後、私のアプリは正常に動作します。これは明らかに、Mac上の直接の場所でタイルを見つけるためです。これはテストには適していますが、iPhone/iPadで動作するために必要です。

この問題は、次の原因で発生している可能性があります。

  • 生成されたディレクトリが正しくありません。
  • タイル画像は、ビルドされた.appファイルに含まれていません。

いずれにせよ、私はそれを解決するために何をすべきか見当もつかない。

この問題を解決するにはどうすればよいですか?


[編集]

そのコードを次のように変更しました。

NSString *tileDirectory = [[NSBundle mainBundle] resourcePath];

すべてのファイルがアプリのルートフォルダーにあり、「タイル」と呼ばれる別のディレクトリに入るように要求しないため、シミュレーターで動作します。

これはシミュレータではエラーなしで実行されますが、iPhoneでは元のエラー(異なるファイルパスだけでなく/xxxx.appで終わる)が表示されます

アプリファイルでxxxx.app/Tilesなどのディレクトリを確認するにはどうすればよいですか-TileMapはこれを行います。

37
LouwHopley

Xcodeで作成する「フォルダー/グループ」は、黄色がかったものがiPhoneアプリの実際のフォルダーとして反映されないことに注意してください。これらは、XCodeプロジェクトを構築するためにあります。必要な数の黄色のグループをネストできますが、それらはXCodeでコードを整理する目的にのみ役立ちます。

編集

XCodeの外にフォルダーを作成し、ドラッグして、ポップアップで[追加されたフォルダーのグループを作成する]ではなく、[追加されたフォルダーのフォルダー参照を作成する]を選択します。

19
LuckyLuke

アプリバンドル内のファイルなので、pathForResource:ofType:ファイルの完全なパス名を取得します。

以下に例を示します。

NSString* filePath = [[NSBundle mainBundle] pathForResource:@"your_file_name" 
                                            ofType:@"the_file_extension"];
44
Jue Wang

タイルがバンドルにない場合、バンドルからコピーするか、インターネットからダウンロードすると、このようなディレクトリを取得できます

NSString *documentdir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *tileDirectory = [documentdir stringByAppendingPathComponent:@"xxxx/Tiles"];
NSLog(@"Tile Directory: %@", tileDirectory);
11
Joe

次のようなリンクのURLを使用する必要があります。

NSURL *path = [[NSBundle mainBundle] URLForResource:@"imagename" withExtension:@"jpg"];

適切なURL参照が提供されます。

1
Dylan Rosario

リソースバンドルにタイルを追加する必要があります。これらのファイルをすべてプロジェクトに追加し、すべてのファイルをプロジェクトディレクトリにコピーするオプションをオンにします。

0
Rahul Vyas