web-dev-qa-db-ja.com

プロジェクト内のローカルファイルにアクセスする方法

アプリに静的ファイル(画像、バイナリなど)を追加したい。 Resourcesという名前のフォルダーの下に配置し、それをXCodeプロジェクトに追加しました。

次に、これらのファイルをプロジェクト設定のCopy Bundle ResourcesタブのBuild Phasesに追加します。

しかし、私はそれらを正しい方法で参照するようには思えません。

たとえば、バイナリファイルを読み取る場合:

NSInputStream *is = [[NSInputStream alloc] initWithFileAtPath:@"data.bin"];
if(![is hasBytesAvailable]) NSLog(@"wrong");

これは常に失敗し、wrongが出力されます

NSData initWithContentsOfFile:を使用して同様の方法を試しましたが、これも実行されません。別の試みは[NSBundle mainBundle]を使用することでしたが、これも完全には実行されませんでした。

私はiOSを使い始めたばかりです。ローカルファイルにアクセスできるようにしてください。任意の助けいただければ幸いです。

ありがとうございました、

24
chizzle

適切な場所でファイルにアクセスしていることを確認する必要があります。 Xcodeは、リソースファイルをResourcesディレクトリのアプリケーションの「アプリケーションバンドル」に配置します。掘り出す方法はたくさんあります。

一般的な方法は、バンドル内のファイルのパス名を取得することです:

NSBundle *mainBundle = [NSBundle mainBundle];
NSString *myFile = [mainBundle pathForResource: @"data" ofType: @"bin"];

バンドルの非標準の場所に他のファイルがある場合、ディレクトリ名を指定できるようにするpathForResourceのバリエーションがあります。

シミュレータが使用しているハードドライブ上の実際の場所を確認して、それを検査したい場合は、次のように言うことができます。

NSLog(@"Main bundle path: %@", mainBundle);
NSLog(@"myFile path: %@", myFile);

開始するには、Xcodeドキュメントライブラリで「バンドルプログラミングガイド」を検索してください。 :-)

30
Jim Hayes

それにはNSBundleクラスを使用します。例えば:

NSString *path = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"bin"];
NSInputStream *is = [[NSInputStream alloc] initWithFileAtPath:path];
...
1
nacho4d

「initialiseWithFileAtPath」を使用している場合でも、[is open]を呼び出す必要があります。初期化によってファイルが自動的に開かれると思いますが、そうではありません。

0
RoyGal