我有代码来检索URL的ubiquitousItemDownloadingStatus资源值:

    do {

        let resourceValues = try item.url.resourceValues(forKeys: [URLResourceKey.ubiquitousItemDownloadingStatusKey]

    } catch {

        print(error.localizedDescription)

    }


但是,我不知道如何处理价值。我可以使用以下代码访问资源值:

    do {

        let resourceValues = try item.url.resourceValues(forKeys: [URLResourceKey.ubiquitousItemDownloadingStatusKey])

        resourceValues.ubiquitousItemDownloadingStatus // ???

    } catch {

        print(error.localizedDescription)

    }


但是我不确定之后该怎么办。 Foundation Library中资源值的声明是一个结构,如下所示:

public struct URLUbiquitousItemDownloadingStatus : Hashable, Equatable, RawRepresentable {

    public init(rawValue: String)
}
extension URLUbiquitousItemDownloadingStatus {

    @available(iOS 7.0, *)
    public static let notDownloaded: URLUbiquitousItemDownloadingStatus

    @available(iOS 7.0, *)
    public static let downloaded: URLUbiquitousItemDownloadingStatus

    @available(iOS 7.0, *)
    public static let current: URLUbiquitousItemDownloadingStatus
}


我很困惑,因为我希望得到一个枚举。

如果有人可以帮助我澄清一下,请多多关照。

最佳答案

不要激动;它对我不起作用,但这是我尝试过的方法:

我已将访问权限包装到var中...

var ubiquityDownloadStatus: URLUbiquitousItemDownloadingStatus? {
    get {
        do {
            let keyValues = try rootURL.resourceValues(forKeys: [.ubiquitousItemIsDownloadingKey])
            return keyValues.ubiquitousItemDownloadingStatus
        } catch {
            os_log("Error checking download status of %s", log: .default, type: .error, rootURL.lastPathComponent)
        }
        return nil
    }
}


...然后按以下方式使用它:

private func statusImage(forNode node: DirectoryNode) -> NSImage? {
    if !node.isUbiquitousItem { return nil }
    let status = node.ubiquityDownloadStatus
    switch status {
    case URLUbiquitousItemDownloadingStatus.current:
        return NSImage(named: NSImage.statusAvailableName)
    case URLUbiquitousItemDownloadingStatus.downloaded:
        return NSImage(named: NSImage.statusPartiallyAvailableName)
    case URLUbiquitousItemDownloadingStatus.notDownloaded:
        return NSImage(named: NSImage.statusUnavailableName)
    default:
        return NSImage(named: NSImage.statusNoneName)
    }
}


...但是结果我总是回到nil

我尝试将iCloud权利添加到我的应用中没有任何效果。接下来,我正在研究这个替代解决方案,无论如何它可能更适合我的需求。

Cocoa - How to detect change in ubiquity container

关于ios - 如何访问ubiquitousItemDownloadingStatus资源值的值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52496654/

10-09 16:15