从文件的绝对路径获取NSImage的奇怪问题

时间:2018-06-24 13:26:58

标签: swift macos

这真的很奇怪也很奇怪。我尝试了所有选项,但是当我尝试通过文件的绝对或相对路径获取nil时,仍然得到NSImage

我接下来尝试过:

let desctopImagePath = NSWorkspace.shared.desktopImageURL(for: mainScreen)?.relativePath.removingPercentEncoding
let desctopImage = try NSImage(byReferencingFile: desctopImagePath)

NSImage(byReferencing: URL(fileURLWithPath: desctopImagePath))

NSImage(contentsOf: URL(fileURLWithPath: desctopImagePath))

NSImage(contentsOfFile: desctopImagePath)

NSImage(contentsOf: URL(string: desctopImagePath))

从每种情况下我得到nil。路径正确。我试图通过FinderCommand + Shift + G来找到它-可以。

这是怎么回事,是什么问题?

enter image description here

1 个答案:

答案 0 :(得分:0)

请不要使用relativePathremovingPercentEncoding。只要有可能,就使用与URL相关的API。

有两种情况

  • 如果您使用一张固定图像desktopImageURL(for,则返回图像URL

    if let mainScreen = NSScreen.main,
        let desktopImageFolderURL = NSWorkspace.shared.desktopImageURL(for: mainScreen) {
        let image = NSImage(contentsOf: desktopImageFolderURL)
    }
    
  • 如果使用的是Change Picture选项,则desktopImageURL(for返回包含所用图像别名文件的目录的URL。您必须将文件保存在文件夹中

    if let mainScreen = NSScreen.main,
        let desktopImageFolderURL = NSWorkspace.shared.desktopImageURL(for: mainScreen) {
        do {
            let desktopImageURLs = try FileManager.default.contentsOfDirectory(at: desktopImageFolderURL, includingPropertiesForKeys: nil, options: [.skipsHiddenFiles, .skipsSubdirectoryDescendants])
            if let firstImage = desktopImageURLs.first {
                let image = NSImage(contentsOf: firstImage)
            }
        } catch { print(error) }
    }