0

具有自定义 URL 方案的全局文档?

我需要通过 URL 缓存信息,使用自定义方案 - 非文件:;允许用户访问,否则将此类 URL 视为通过其 URLglobal进行的任何访问都会看到相同的数据。这只是访问用户默认值的一种奇特方式。

如果文档退出 - 以前打开过,我依靠文档控制器document(url:)找到这样的 URL。

然而它没有?

在应用程序完成启动时考虑这一点:

do {
    let ibm = URL.init(string: "https://www.ibm.com")!
    let doc = try docController.makeDocument(withContentsOf: ibm, ofType: "myType")
    assert((doc == docController.document(for: ibm)), "created document is not found?")
} catch let error {
    NSApp.presentError(error)
}

断言触发!

所以我停下来试着弄清楚我做错了什么。

本质上,我试图在一个平面命名空间中支持非文件:信息,以提供一致的访问和内容。

4

1 回答 1

0

可能不是答案 - 为什么没有找到这样的 URL 方案,但一个可行的解决方案是缓存任何东西,在搜索方法前面使用这样的缓存,但这样做会产生维护问题:

@objc dynamic var docCache = [URL:NSDocument]()
override var documents: [NSDocument] {
    let  appDocuments = Array(Set([Array(docCache.values),super.documents].reduce([], +)))
    
    return appDocuments
}
override func document(for url: URL) -> NSDocument? {
    if let document = super.document(for: url) {
        docCache[url] = document
        return document
    }
    else
    if let document = docCache[url] {
        return document
    }
    else
    {
        return nil
    }
}

享受。

于 2022-01-09T13:33:28.620 回答