0

NSOpenPanelで画像を開くために以下のコードを使用しますが、機能しません

//panel=NSOpenPanel
 NSString *imgg = [NSString stringWithFormat:@"%@",panel.URL];
 self.imgUser.image=[NSImage imageNamed:imgg];
4

1 に答える 1

6

問題は、+ [NSImage imageNamed:]がURLで画像をロードしないことです。ドキュメントを読むと、実際の動作が説明されています。つまり、その名前でキャッシュに保存されている画像、またはそのファイル名でアプリのバンドルまたはAppKitのフレームワークに保存されている画像を検索します。

URLで実際に画像を開く方法はたくさんあります。あなたがおそらく探しているのは:

NSImage *image = [[[NSImage alloc] initWithContentsOfURL:panel.URL] autorelease];

また、副次的な問題として、URLをパスに変換しようとしている方法が正しくありません。file://localhost/Users/user437064/Pictures/mypic.jpgのNSURLがある場合、それを文字列に変換するだけで、@ "file://localhost/Users/user437064/Pictures/mypic.jpg"が得られます。これは、パスベースのAPIで使用できるパスではありません。実際に必要なのは@"/Users / user437064 / Pictures / mypic.jpg"であり、それを取得する方法は-[NSURLパス]です。したがって、 "NSString * imgg =[panel.URLpath];"。しかし、これは関係ありません。非常に古いバージョンのOSX、または邪魔にならないAPIを処理する必要がない限り、ほとんどの場合、パスを取得するメソッドごとにURLを取得するメソッドがあり、パスベースのメソッドは非推奨になることがよくあります。

さらに厄介な問題として、何かを文字列に変換するためにstringWithFormat:は必要ありません。"[panel.URL description]"は、 "[NSString stringWithFormat:@"%@ "、panel.URL]"とまったく同じ結果を、はるかに単純かつもう少し効率的に提供します。

于 2012-04-27T18:14:37.133 に答える