アプリ内のファイルへのアクセスに問題があります。
現在使用しています
//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はこれを行います。
Xcodeで作成する「フォルダー/グループ」は、黄色がかったものがiPhoneアプリの実際のフォルダーとして反映されないことに注意してください。これらは、XCodeプロジェクトを構築するためにあります。必要な数の黄色のグループをネストできますが、それらはXCodeでコードを整理する目的にのみ役立ちます。
XCodeの外にフォルダーを作成し、ドラッグして、ポップアップで[追加されたフォルダーのグループを作成する]ではなく、[追加されたフォルダーのフォルダー参照を作成する]を選択します。
アプリバンドル内のファイルなので、pathForResource:ofType:
ファイルの完全なパス名を取得します。
以下に例を示します。
NSString* filePath = [[NSBundle mainBundle] pathForResource:@"your_file_name"
ofType:@"the_file_extension"];
タイルがバンドルにない場合、バンドルからコピーするか、インターネットからダウンロードすると、このようなディレクトリを取得できます
NSString *documentdir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *tileDirectory = [documentdir stringByAppendingPathComponent:@"xxxx/Tiles"];
NSLog(@"Tile Directory: %@", tileDirectory);
次のようなリンクのURLを使用する必要があります。
NSURL *path = [[NSBundle mainBundle] URLForResource:@"imagename" withExtension:@"jpg"];
適切なURL参照が提供されます。
リソースバンドルにタイルを追加する必要があります。これらのファイルをすべてプロジェクトに追加し、すべてのファイルをプロジェクトディレクトリにコピーするオプションをオンにします。