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 转换为路径的方式是不正确的。如果您有一个文件://localhost/Users/user437064/Pictures/mypic.jpg 的 NSURL,只需将其转换为字符串即可为您提供 @"file://localhost/Users/user437064/Pictures/mypic.jpg"。这不是您可以与基于路径的 API 一起使用的路径。你真正想要的是@"/Users/user437064/Pictures/mypic.jpg",你得到的方式是-[NSURL 路径]。所以“NSString *imgg = [panel.URL 路径];”。但这无关紧要;除非您需要处理非常旧的 OS X 版本或不常见的 API,否则几乎总是有一种方法为每个采用路径的方法采用 URL,并且通常不推荐使用基于路径的方法。

作为一个更遥远的问题,您不需要 stringWithFormat: 将某些内容转换为字符串;"[panel.URL description]" 给出了与 "[NSString stringWithFormat:@"%@", panel.URL]" 完全相同的结果,更简单,更有效。

于 2012-04-27T18:14:37.133 回答