Расширение поставщика файлов iOS 11
В настоящее время я немного застрял в этой библиотеке провайдера файлов. Я получил свой пример проекта, работающий до точки отображения файлов / папок и возможности навигации. Кроме того, я могу вызвать функцию startProvidingItem (at url), где вы начинаете скачивать файл с вашего удаленного сервера. Тем не менее, этот экран появляется, когда я нажимаю на файл изображения, например:
Может кто-нибудь объяснить, если я упускаю какие-либо функции в моей функции?
override func startProvidingItem(at url: URL, completionHandler: @escaping (Error?) -> Void) {
print("file provider extension startProvidingItem: \(url.absoluteString)")
// Should ensure that the actual file is in the position returned by URLForItemWithIdentifier:, then call the completion handler
if !fileManager.fileExists(atPath: url.absoluteString) {
guard let identifier = self.persistentIdentifierForItem(at: url) else {
return
}
guard let urlForContent = URL(string: "some url api endpoint") else {
return
}
let sessionConfig = URLSessionConfiguration.ephemeral
let session = URLSession(configuration: sessionConfig)
let task = session.dataTask(with: urlForContent) { (data, response, error) -> Void in
DispatchQueue.main.async {
if let data = data {
self.fileManager.createFile(atPath: url.absoluteString, contents: data, attributes: nil)
}
}
}
task.resume()
}
/* TODO:
This is one of the main entry points of the file provider. We need to check whether the file already exists on disk,
whether we know of a more recent version of the file, and implement a policy for these cases. Pseudocode:
if !fileOnDisk {
downloadRemoteFile()
callCompletion(downloadErrorOrNil)
} else if fileIsCurrent {
callCompletion(nil)
} else {
if localFileHasChanges {
// in this case, a version of the file is on disk, but we know of a more recent version
// we need to implement a strategy to resolve this conflict
moveLocalFileAside()
scheduleUploadOfLocalFile()
downloadRemoteFile()
callCompletion(downloadErrorOrNil)
} else {
downloadRemoteFile()
callCompletion(downloadErrorOrNil)
}
}
*/
completionHandler(NSError(domain: NSCocoaErrorDomain, code: NSFeatureUnsupportedError, userInfo:[:]))
}