我有一个NSImage(它是相应的NSData),我需要将该图像设置为桌面。似乎APple为设置图像提供的唯一方法是
[NSWorkspace setDesktopImageURL:forScreen:options:error:]
如何从NSImage或NSData转换为NSURL?我这样做是为了保存imageData:
[imageData writeToFile:@"wallpaper" atomically:NO];
但是如何才能将其设置为桌面?我无法弄清楚如何获取保存到的URL。
答案 0 :(得分:2)
准确回答您提出的问题:
[NSURL fileURLWithPath:@"wallpaper"]
但实际将文件写入传递给NSWorkspace的同一URL更有意义,如下所示:
NSURL *url = [NSURL fileURLWithPath:@"wallpaper"];
[imageData writeToURL:url atomically:NO];
[[NSWorkspace sharedWorkspace] setDesktopImageURL:url …];
选择放置文件的好地方更有意义。作为一般规则(即使在软件之外),如果你知道你把东西放在哪里,那么以后找到它比你只是告诉别人“把它放在某个地方”要容易得多。而你的具体“把它放在某个地方”实际上意味着“把它放在当前的工作目录中”,这可能是你没有写访问权限的某个地方,或某个用户不希望你混乱的地方,或者它可能已经有了其中称为“壁纸”的文件(或目录),或......
因此,您可能希望调用 - [NSFileManager URLForDirectory:inDomain:properForURL:create:error:]来获取NSTemporaryDirectory,或使用不同的临时文件API。或者您可能希望将其放在应用程序的缓存目录中而不是临时位置。无论你觉得什么都有意义。
此外,您可能希望在文件上放置适当的扩展名。而且,在不知道你从哪里得到imageData的情况下,我不确定你是否会得到一个可用的图像文件。但这都是不同的问题。