objective-c - 如何将 NSImage 或 NSData 设置为桌面图像?

标签 objective-c macos cocoa

我有一个 NSImage(及其相应的 NSData),我需要将该图像设置为桌面。看来Apple提供的唯一设置图像的方法是

[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 …];

选择一个合适的位置来放置文件更有意义。作为一般规则(即使在软件之外),如果您知道将某些东西放在哪里,那么以后找到它比您只是告诉某人“将其放在某个地方”要容易得多。而你的具体“把它放在某个地方”实际上意味着“把它放在当前工作目录中”,这可能是你没有写访问权限的地方,或者用户不希望你弄乱的地方,或者它可能已经有了其中一个名为“wallpaper”的文件(或目录),或者...

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

此外,您可能希望为该文件添加适当的扩展名。而且,在不知道您从哪里获得 imageData 的情况下,我不确定您是否会获得可用的图像文件。但这都是不同的问题。

关于objective-c - 如何将 NSImage 或 NSData 设置为桌面图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11041034/

相关文章:

objective-c - runModalForWindow 限制 http 请求

objective-c - Objective-C 的标准命名约定

iOS: block 和 ivars

ios - 使用 self 时奇怪的 iOS 应用程序崩溃行为。通过实例变量

php - 警告 : file_put_contents(): failed to open stream: Permission denied

macos - 如何用python3控制音量?

Objective-C/CGI 我唯一的选择?

objective-c - sqlite3_unlock_notify

macos - 如何终止/重置捆绑 XPC 助手?

objective-c - 实现 WebView 数据库配额委托(delegate)