2012-02-17 24 views
37

私のプロジェクトにいくつかの.applecriptファイルをロードしようとしています。pathForResourceがNULLを返します

は、このような "サポートファイル" ディレクトリにそれらをコピー元:

enter image description here

し、それらにアクセスしようとしました:

NSBundle *bundle = [NSBundle mainBundle]; 
NSLog(@"Resource path for test.applescript: %@", [bundle pathForResource:@"test" ofType:@"applescript"]); 

pathForResourceは常にnullを返します。

両方のファイルが正しくxcodeにインポートされています。ターゲットメンバーシップは私のアプリです。 類似の質問からの解決策は本当に役に立たなかった

私は間違っていますか? Xcodeのターゲット「フェーズの構築」「コピーバンドルリソース」」の下にファイルを追加するには

答えて

138

+0

シンプルで正確に何が欠けていたのですか?ありがとう! – dvcrn

+1

Xcode 4.5ではドラッグアンドドロップがまだ壊れています(たとえば、Apple独自のOpenGLシェーダをFinderからプロジェクトにドラッグすると、バンドルリソースのコピーフェーズに追加できませんでした。 – Adam

+1

Zaphありがとうございました。残った日を保存しました。 –

0

は、あなたのイメージは、いくつかのフォルダにそのファイル

が、この場合にpathForResource:ofType:inDirectory:方法を試してみていることを前提としない:?

Zaphが言ったことに加えて
NSLog(@"Resource path for test.applescript: %@", [bundle pathForResource:@"test" ofType:@"applescript" inDirectory:@"folder/Supporting Files"); 
0

、あなたが「リリース」モードで実行されていないことを確認してください。

私のための時間がありましたその設定を取り戻す必要があり、シンボルが削除されたため、NSBundleはパスを解決できなくなりました。

1

上記のZaphからの偉大な応答ですが、私がそれをしていたときに気付いたのは、少なくともXcode 6.1ではより速い方法でした。

ファイル(例:test.applescript)をシングルクリックしてXcodeの右メニューを開くと、「対象メンバーシップ」というセクションが表示されます。適切なターゲット(スクリプトを使用しているものと同じ)が選択されていることを確認し、「バンドルリソースのコピー」の下にファイルを追加するのと同じ仕事をします。

また、複数の場所からロードしている場合、またはこのクラスを継承している場合実際に使用しないでください。

[NSBundle mainBundle];

ではなく、あなたがそれはあなたが実行しているターゲットに関連する適切な項目からリソースを取るよ呼び出す方法にどこを心配する必要がないことを意味し

[NSBundle bundleForClass:[self class]]; 

を使用しています。

4

まだパスが無く、ファイルが「バンドルリソースのコピー」に追加されている場合は、ファイルをバンドルリソースのコピーから削除して、もう一度追加してください。

+0

正確に何が必要です... – code4j

関連する問題