我使用下面的代码用NSOpenPanel打开图像但不起作用
//panel=NSOpenPanel
NSString *imgg = [NSString stringWithFormat:@"%@",panel.URL];
self.imgUser.image=[NSImage imageNamed:imgg];
答案 0 :(得分:6)
问题是+ [NSImage imageNamed:]不会通过URL加载图像。如果您阅读文档,它会解释它实际上做了什么:它查找以该名称存储在缓存中的图像,或者以该文件名存储在应用程序包或AppKit框架中。
有很多方法可以通过URL实际打开图像。您可能正在寻找的是:
NSImage *image = [[[NSImage alloc] initWithContentsOfURL:panel.URL] autorelease];
此外,作为一个侧面问题,您尝试将URL转换为路径的方式不正确。如果您有一个NSURL文件://localhost/Users/user437064/Pictures/mypic.jpg,只需将其转换为字符串就可以得到@“file://localhost/Users/user437064/Pictures/mypic.jpg”。这不是可以与基于路径的API一起使用的路径。你真正想要的是@“/ Users / user437064 / Pictures / mypic.jpg”,你得到的是 - [NSURL路径]。所以“NSString * imgg = [panel.URL path];”。但这无关紧要;除非您需要处理非常旧版本的OS X或不合适的API,否则几乎总会有一种方法为每个采用路径的方法获取一个URL,并且通常不推荐使用基于路径的方法。
作为一个更加偏向边缘的问题,你不需要stringWithFormat:将某些东西转换为字符串; “[panel.URL description]”给出与“[NSString stringWithFormat:@”%@“,panel.URL]”完全相同的结果,“更简单,更有效。