【发布时间】:2019-02-07 19:44:07
【问题描述】:
我有一个应用程序,它实现了 FileProviderExtension 的所有花里胡哨。现在问题来了,在“文件”应用中显示下载/上传进度需要什么?
有一个previously asked question 的答案相当模糊,没有产生任何结果。
这是startProvidingItem(at url: URL ...)函数的粗略代码:
let downloadDelegate = DownloadDelegate(completionHandler, targetLocation: url, fileManager: fileManager)
let session = URLSession(configuration: URLSessionConfiguration.default, delegate: downloadDelegate, delegateQueue: nil)
let downloadTask = session.downloadTask(with: sftpURL)
NSFileProviderManager.default.register(downloadTask, forItemWithIdentifier: id) { error in
if let error = error {
print("Error registering progress task \(error)")
} else {
print("Registered progress task")
downloadTask.resume()
}
}
DownloadDelegate 调用 completionHandler 时出现错误或 nil 成功时。这一切正常,但即使 downloadTask 已注册到 FileProviderManager,也没有显示任何进度。
它开始在文件下方显示不确定的微调器和Waiting to Download。下载任务肯定会发送进度事件(通过 DownloadDelegate 中的 urlSession(..., totalBytesWritten: ...) 方法确认)但 FileProvider 似乎忽略了它们。
TL;DR:在 FileExtension 中使下载进度正常工作需要什么?
【问题讨论】:
-
您设法解决了这个问题吗?我也有。我尝试了建议的答案,但它根本没有帮助。在下载实际完成之前,我仍然看到“等待下载”。
-
IIRC 接受的答案在使用常规 URLSession 时确实有效。它并没有最终适用于我的用例,因为我无法在我的自定义 URLSession 上使用 .background (正在使用自定义协议定义或 smth)。一定要设置documentSize属性,否则无法计算进度。
-
感谢您的快速响应,不幸的是它没有工作。我尝试使用 URLSession.shared 并尝试使用默认配置的新会话对象。奇怪的是,使用后台配置我可以从预览页面看到进度,但不能在列表视图中看到。一个多星期以来,我一直在努力解决这个问题!
-
您能澄清一下“预览页面”的含义吗?下载文件的文件应用程序预览?后台下载的问题是它们在您的应用程序沙箱之外执行(因此需要共享容器标识符)。你指的是什么列表视图?
-
最简单的方法是显示它:cti.ctera.com/invitations?share=dd8e8d1bc3331646c17b,链接到显示问题的视频
标签: ios ios-app-extension fileprovider-extension