Как удалить файлы в песочнице приложения? - PullRequest
0 голосов
/ 29 мая 2019

У меня настроено UITableView, и его источником данных является песочница приложения, поэтому все строки заполнены файлами, которые были импортированы с использованием UIDocumentPicker, но мне также нужно иметь возможность удалять эти файлы.

Функция удаления работает, я могу скользить и удалять строки и все, но файл остается в песочнице приложения, поэтому каждый раз, когда я импортирую новый файл, строки пополняются ( TableView перезагружается каждый раз, когда что-то импортируется) с ранее «удаленным» материалом.

    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == UITableViewCell.EditingStyle.delete {
            self.deleteFile()
            importedfiles.remove(at: indexPath.row)
            tableView.deleteRows(at: [indexPath], with: UITableView.RowAnimation.automatic)
        }

 }

Плюс ко всему, что уже есть в коде, мне нужна функция для удаления файла из песочницы приложения (импортированные файлы).

Вот что у меня есть, я могу удалять файлы, но только весь каталог, а это не то, что мне нужно. Код:

   func deleteFile() {
        let dirPaths = FM.urls(for: .documentDirectory, in: .userDomainMask)
        let docsDir = dirPaths[0].path

        if FM.fileExists(atPath: docsDir) {
            do {
                try FM.removeItem(atPath: docsDir)
            } catch {
                print("Could not delete file: \(error)")
            }
        }
    }

Редактировать: «импортированные файлы» - это файлы, которые были импортированы в каталог приложения (документы) с использованием UIDocumentPickerViewController. И TableView использует эти данные для создания ячеек.

1 Ответ

0 голосов
/ 30 мая 2019

Измените метод удаления на

func deleteFile(_ url: URL) {
    let fm = FileManager.default
    do {
        try fm.removeItem(at: url)
    } catch {
        print(error)
    }
}

и назовите его

if editingStyle == UITableViewCell.EditingStyle.delete {
    self.deleteFile(importedfiles[indexPath.row])
    importedfiles.remove(at: indexPath.row)
    tableView.deleteRows(at: [indexPath], with: UITableView.RowAnimation.automatic)
}

Это должно работать, но нет обработки ошибок, и если вы хотите, вы можете определить свой метод для возврата Result

func deleteFile(_ url: URL) -> Result<Void,Error> {
    let fm = FileManager.default
    do {
        try fm.removeItem(at: url)
        return .success(())
    } catch {
        return .failure(error)
    }
}

и обработать результат в switch

let result = deleteFile(importedfiles[indexPath.row])
switch result {
case .success:
    //Maybe update array and table view here
case .failure(let error):
     //dislplay error?
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...