Как удалить файл после закрытия QLPreviewController? - PullRequest
0 голосов
/ 18 октября 2018

Мое приложение требует загрузки и показа файлов в формате QLPreviewController.В некоторых ситуациях эти файлы должны быть временными, то есть после завершения пользователем QLPreviewController файлы должны быть удалены из внутреннего хранилища.

Я пытался вызвать блок завершения, удаляя эти файлы, как показано в следующем коде:

func launchPreview(QLpreviewItem: QLPreviewItem, completion: @escaping () -> Void) {
    previewItem = QLpreviewItem
    let previewController = QLPreviewController()
    previewController.dataSource = self
    self.present(previewController, animated: true, completion: {
        completion()
    })
}

Блок завершения выглядит следующим образом и работает нормально:

if fileManager.fileExists(atPath: path) {
    try! fileManager.removeItem(atPath: path)
}

Проблема с этим подходом заключается в том, что пользователи пытаются поделиться файлом в previewController ... Это былоудален сразу после его показа в контроллере предварительного просмотра, поэтому он недоступен.

Есть ли способ выполнить код после закрытия previewController?

В качестве альтернативы, что делать для временного хранения файлов?каталог?Это будет возможно на iOS?

Я использую следующий код для загрузки и сохранения своих файлов:

let destination: DownloadRequest.DownloadFileDestination = { _, _ in
    let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] //path
    let fileURL = documentsURL.appendingPathComponent(attachment.name) //url
    return (fileURL, [.createIntermediateDirectories])
}

Alamofire.download(RestHelper.apiV1 + "/attachments/\(attachment.id)", to: destination).response { response in
    //Some code here
}

Может быть, проще изменить место назначения на каталог tmp,но я не уверен.

Спасибо!

1 Ответ

0 голосов
/ 11 февраля 2019

QLPreviewControllerDelegate может сообщить вам, когда контроллер предварительного просмотра будет / действительно отклонен, если вы реализуете соответствующую функцию.

optional func previewController{Will/Did}Dismiss(_ controller: QLPreviewController)

Просто не забудьте установить делегата на QLPreviewController:

let preview = QLPreviewController()
preview.dataSource = self
preview.delegate = self
...