我设置了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)
}
}
加上代码中已经包含的所有内容,我需要从应用程序的沙箱中删除文件(importedfiles)的功能。
这是到目前为止,我可以删除文件,但只能删除整个目录,这不是我想要的。代码:
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)")
}
}
}
编辑:“ importedfiles”是使用UIDocumentPickerViewController导入到应用程序目录(文档)中的文件。然后,TableView使用此数据来创建单元格。
答案 0 :(得分:0)
将删除方法更改为
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?
}