Objective c 如何将NSImage或NSData设置为桌面映像?

Objective c 如何将NSImage或NSData设置为桌面映像?,objective-c,macos,cocoa,Objective C,Macos,Cocoa,我有一个NSImage(和它对应的NSData),我需要将该映像设置为桌面。似乎苹果提供的唯一设置图像的方法是 [NSWorkspace setDesktopImageURL:forScreen:options:error:] 如何将NSImage或NSData转换为NSURL?我这样做是为了保存图像数据: [imageData writeToFile:@"wallpaper" atomically:NO]; 但是,我如何才能获得该URL以将其设置为桌面?我不知道如何获取保存到的URL。要

我有一个NSImage(和它对应的NSData),我需要将该映像设置为桌面。似乎苹果提供的唯一设置图像的方法是

[NSWorkspace setDesktopImageURL:forScreen:options:error:]
如何将NSImage或NSData转换为NSURL?我这样做是为了保存图像数据:

[imageData writeToFile:@"wallpaper" atomically:NO]; 

但是,我如何才能获得该URL以将其设置为桌面?我不知道如何获取保存到的URL。

要准确回答您提出的问题:

[NSURL fileURLWithPath:@"wallpaper"]
但将文件实际写入传递给NSWorkspace的相同URL更有意义,如下所示:

NSURL *url = [NSURL fileURLWithPath:@"wallpaper"];
[imageData writeToURL:url atomically:NO];
[[NSWorkspace sharedWorkspace] setDesktopImageURL:url …];
选择一个放置文件的好地方更有意义。一般来说(即使是在软件之外),如果你知道你把东西放在哪里,那么以后找到它要比告诉别人“把它放在什么地方”容易得多。你具体的“把它放在某个地方”实际上是指“把它放在当前工作目录”,可能是你没有写权限的地方,或者是用户不想让你乱七八糟的地方,或者可能已经有一个名为“墙纸”的文件(或目录),或者

因此,您可能需要调用-[NSFileManager URLForDirectory:inDomain:ApproverForUrl:create:error:]来获取NSTemporaryDirectory,或者使用不同的临时文件API。或者,您可能希望将其放在应用程序的缓存目录中,而不是临时位置。任何对你有意义的事情


此外,您可能希望在文件上放置适当的扩展名。而且,在不知道图像数据来自何处的情况下,我不确定您是否能够获得可用的图像文件。但这些都是独立的问题。

啊,现在看起来很简单。谢谢当我用相同的名称保存不同的图像时,它出现了一些问题,但我将其更改为使用图像的唯一id(我已经有了)保存,并且它工作得很好。@user1023127:我可能会使用一个临时文件API并依靠它来保证名称的唯一性,但是如果您已经拥有某种唯一id,这也行。