热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS11上的UIDocument创建:不允许读者访问该URL

如何解决《iOS11上的UIDocument创建:不允许读者访问该URL》经验,请问有什么解决方案?

从iOS 11开始,每次使用UIDocumentAPI 创建新文档时都会遇到以下错误:

[错误]无法获取项目/var/mobile/Containers/Data/Application/XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX/Documents/myDoc-XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX.myFile(n)的属性值.

错误:错误域= NSFileProviderInternalErrorDomain代码= 1
"不允许读者访问该URL."
UserInfo = {NSLocalizedDescription =不允许读者访问该URL.}

不同于类似的问题(1,2,3上SO)在此,我没有使用UIDocumentBrowserViewController.我只是创建一个UIDocument并自己调用save()Documents目录.我发现的最接近的问题用途UIManagedDocument.但是,就我而言,尽管出现错误消息,仍然可以成功创建和写入文件.

这是我保存例程的要点:

@IBAction func createDoc(_ sender: Any) {
    let uuid = UUID().uuidString
    let doc = Document(baseName: "myDoc-\(uuid)")
    doc.save(to: doc.fileURL, for: .forCreating) { (completed) in
        if (completed) {
            doc.close(completionHandler: nil)
            self.verifyNumberOfFiles()
        }
    }
}

UIDocument为了简化这个问题,我的子类也几乎是空白的:

class Document: UIDocument {    

    let fileExtension = "myFile"

    override init(fileURL url: URL) {
        super.init(fileURL: url)
    }

    /// Convenience method for `init(fileURL:)`
    convenience init(baseName: String) {
        self.init(fileURL: documentsDirectory.appendingPathComponent(baseName).appendingPathExtension(Document.fileExtension))
    }

    override func contents(forType typeName: String) throws -> Any {
        return NSData()
    }

    override func load(fromContents contents: Any, ofType typeName: String?) throws {

    }

}

我总是写入Documents文件夹,我的查找例程可以验证我的文件是否已成功创建:

public var documentsDirectory: URL {
    return FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last!
}

func loadFileURLs(from dirURL: URL) -> [URL]? {
    return try? FileManager().contentsOfDirectory(at: dirURL, includingPropertiesForKeys: nil)
}

到目前为止我发现了什么:

即使我已经设置了UTI,也会出现错误.看到这个和这个.

当我通过AirDrop向我的设备发送"myFile"并且它正确触发我的应用程序打开时,我可以验证我的UTI是否正常工作.

该错误仅出现在iOS 11上.相同的代码不会在iOS 10上重现错误,就像上面的问题一样.

我尝试添加UISupportsDocumentBrowser密钥虽然我没有使用浏览器,但它没有解决错误.

怎么了?这只是iOS 11上的"噪音"错误消息吗?

如果有兴趣的话,这是我在线的 GitHub代码.


推荐阅读
author-avatar
豆豆bo69_550
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有