2016-07-30 5 views
1

私は簡単なスクリーンセーバーを構築しようとしています。まず、アセットカタログから、[[NSImage imagedNamed:]]メソッドを使用してイメージをロードし、nil値を返すことです。イメージが見つからないことを意味します。 [[NSBundle mainBundle]URLForImageResource:]メソッドでバンドルからイメージを直接ロードしようとすると、ゼロ値も得られます。なぜこのようなことが起こるのか分かりません。イメージは資産カタログにあり、プロジェクト設定ではバンドルリソースとして設定しています。私はインターネット上で検索を続けた後アセットカタログにある画像を読み込めないのはなぜですか?

+0

'[NSImage imageNamed:]'は、アセットカタログではなくアプリバンドル内の画像にアクセスするためのものです。なぜ画像をあなたのアプリケーションバンドルに入れられないのですか? – Droppy

+1

私は、網膜と非網膜のMac用に私のイメージのバージョンを最適化しました。そのため、資産カタログになると考えました。もちろん、イメージを直接アプリケーションバンドルに入れることもできますが、それはどちらも機能しません。 – ok404

答えて

0

私はスクリーンセーバーは、プラグインのいくつかの種類として実行され、メインバンドルをロードすることによって、私は私がロードすることで、私のリソースを取得することはできませんよということを意味システム環境バンドルをロードしていることが分かりましたメインバンドルではなく、bundleIdentifierまたはバンドルが保存されているパスでバンドルをロードする必要があります。 だから私のコードは次のようになります。あなたの名前によって資産カタログできアクセス画像、しかしNSImageimageNamed:方法を使用していない

NSBundle*bundle=[NSBundle bundleWithIdentifier:@"com.myname.APOD"]; 
NSImage*image=[[NSImage alloc] initWithContentsOfFile:[bundle pathForResource:@"appimage" ofType:@"png"]]; 
0

- 代わりにあなたがイメージリソースのバンドルを照会することができます

を特定の名前の

NSBundle *bundle = [NSBundle bundleForClass:[self class]]; 
NSImage *myImage = [bundle imageForResource:@"MyImageName"]; 

MyImageNameはあなたの資産のカタログに画像を割り当てられた名前を参照する:あなたが希望の画像を要求したクラスの束で画像を検索します。

関連する問題