3

プロジェクトに新しいフォルダーを作成し、そこにイメージ ("io.jpg" という名前) をコピーしました。
ビルドフェーズも確認しました->バンドルリソースをコピーすると、ファイルがそこにあります。
だから私はこの画像のパスを取得しようとしています:

NSBundle* bundle=[NSBundle mainBundle];
NSString* path=[bundle pathForResource: @"io" ofType: @"jpg"];
NSLog(@"%@",path);

しかし、それは (null) を出力します。私もこの方法を試しました:

NSBundle* bundle=[NSBundle mainBundle];
NSString* path=[bundle pathForImageResource: @"io"];
NSLog(@"%@",path);

しかし、それはまだ (null) を出力します。
どうしたの?

4

6 に答える 6

6

移動: ターゲット -> "ビルド フェーズ" -> "バンドル リソースのコピー" 次に、その特定のファイルをここに追加します。

プロジェクトをクリーンアップして実行します。できます。:)

于 2013-08-31T10:22:09.253 に答える
3

私の推測では、Xcode プロジェクトに新しいフォルダーを作成したということは、青いフォルダー参照を作成し、画像リソースがバンドルのサブディレクトリにあるということです。

このクラスがどれだけ古く、Foundation フレームワークにとって重要であるかを考えると、NSBundle のバグではないと断言できます。

より具体的なインスタンス メソッドを使用してリソースにアクセスしてみてください

- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)extension inDirectory:(NSString *)subpath

whereは、あなたが作成したと推測しているフォルダー参照subpathの名前です。

于 2012-08-01T02:13:44.157 に答える
3

要求しているリソースが出力に存在しない (または存在するべき場所に存在しない) 場合は、nil パスが返されます。それが本当に私が見た唯一の理由です。

存在する必要があることを証明することを忘れて、出力をチェックして存在することを確認してください。

(ファイル名は大文字と小文字が区別されることにも注意してください。)

明確にするために、 の出力バンドルを確認する必要があります~/Library/Developer/Xcode/DerviedData/Project-{GUID}/Build/Products。あなたのイメージは失われます。

于 2012-07-29T02:14:39.193 に答える
0

画像を取得しようとしているだけの場合、これはすべてやり過ぎです。アプリケーションバンドルに含まれているとしましょうbundleImage.PNG。どこか、どういうわけか…</ p>

NSImage *image = [NSImage imageNamed:@"bundleImage"];

確かに..それを見つけるでしょう…それがそこにあるなら…もっと単純にすることはできませんよね?

画像がロード可能なバンドルまたはフレームワークにあるなど、偶然に少し複雑な状況の場合は、次のようなコード(NSImageのクラスカテゴリ)を使用して、リソースも返すことができます。

+ (id) imageInFrameworkWithFileName:(NSString *) fileName {
   NSBundle *b = [NSBundle bundleForClass: [DummyClass class]];
   return [self imageWithFileName: fileName inBundle: b];
}

正直なところ、そのような「ダミークラス」のコンセプトや仕組みはよくわかりませんが、こんな感じです。

@interface DummyClass : NSObject
@end
@implementation DummyClass 
@end
于 2012-08-01T01:53:45.623 に答える
0

アプリから画像を削除してから、再度追加してください。ビルドを実行する前にクリーンアップしてください。それが役立つかどうかを確認してください。それ以外の場合は、画像が追加された場所を示すプロジェクト ナビゲーターのスクリーンショットを提供してください。最上位にある必要があります。あなたの Application.app.Is のどこかのフォルダー/サブフォルダー内にあります。

于 2012-08-06T07:32:58.373 に答える
0

数週間前にこのような問題がありました。そして、私はボックスにチェックを入れていなかったことがわかりました。と尋ねたところ、以下のような答えが返ってきました。

「Xcode プロジェクト ナビゲーター (左側) でファイルを選択し、ファイル インスペクター (右側) の [ターゲット メンバーシップ] でターゲットがチェックされていることを確認します。 -- ファイル名のスペルも再確認してください。 – ムンディ」

于 2012-07-30T06:01:38.987 に答える