objective-c - 无法使用 NSOpenPanel 打开图像

标签 objective-c xcode cocoa nsopenpanel

我使用下面的代码使用 NSOpenPanel 打开图像,但不起作用

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

最佳答案

问题是 +[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 path]。所以“NSString *imgg = [panel.URL 路径];”。但这无关紧要;除非您需要处理非常旧版本的 OS X 或过时的 API,否则几乎总是有一个方法为每个采用路径的方法采用 URL,并且通常不推荐使用基于路径的方法。

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

关于objective-c - 无法使用 NSOpenPanel 打开图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10355591/

相关文章:

ios - 使用BOOL创建NSDictionary时收到EXC_BAD_ACCESS(Code = EXC_ARM_DA_ALIGN)

ios - 在iOS 8和9中14天后如何重复本地通知

ios - Xcode 8.2 : Swift3- how to hide status bar?

ios - 删除日文字符时 Swift "can not increment endIndex"

objective-c - 禁止面向用户的文本应使用本地化字符串宏警告

ios - 滚动uitableview时重复的单元格

swift - 尝试从 aws s3 存储桶下载图片时访问被拒绝

swift - 有没有办法使用 NSSharingService 包含诸如 "BCC"和 "CC"之类的字段?

objective-c - isEqualToString 不返回 true

ios - 如何继续添加 UIButton 并以编程方式为它们设置不同的操作?