gpt4 book ai didi

ios - FileManager 更改不适用于重新排序并且具有 ErrorDomain Code=17 "File exists"

转载 作者:行者123 更新时间:2023-11-28 08:01:30 25 4
gpt4 key购买 nike

我对 iOS 开发和 Swift 完全陌生。

我想为我的 TableView 实现编辑模式,它显示如下图所示的文件列表:

how my table view displays

在编辑模式下一切正常,我的代码在删除时也能正常工作,但是当我通过拖动文件来更改文件的位置时,它们每次都会回到原来的位置。更改文件管理器的代码不会运行,并且出现此错误:

NSUnderlyingError=0x1c0249c90 {Error Domain=NSPOSIXErrorDomain Code=17 "File exists"}}`

这条线不会调用:

 do {
try FileManager.default.moveItem(atPath: (documentURL?.path)!, toPath: (documentURL_Dest?.path)!)
}

在这里,这是我在 View Controller 中的 moveRowAt 函数:

    var documents = [PDFDocument]()

override func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {

let movedObject = self.documents[sourceIndexPath.row]

let document = movedObject
let documentURL = document.documentURL
let document_Dest = documents[destinationIndexPath.row]
let documentURL_Dest = document_Dest.documentURL




documents.remove(at: sourceIndexPath.row)

documents.insert(movedObject, at: destinationIndexPath.row)

//this do wouldn't call and catch is calling each time
do {


try FileManager.default.moveItem(atPath: (documentURL?.path)!, toPath: (documentURL_Dest?.path)!)


} catch let error {
NSLog("Error in copying Data.plist: \(error)") // see the above quoted error message from here
}


refreshData()

}

这是我的 refreshData() 函数:

 private func refreshData() {
let fileManager = FileManager.default
let documentDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
let contents = try! fileManager.contentsOfDirectory(at: documentDirectory, includingPropertiesForKeys: nil, options: .skipsHiddenFiles)
documents = contents.flatMap { PDFDocument(url: $0) }

tableView.reloadData()
}

@objc func documentDirectoryDidChange(_ notification: Notification) {
refreshData()
}

我在 viewDidLoad 中放置了启用编辑模式的代码:

self.navigationItem.rightBarButtonItem = self.editButtonItem

最佳答案

该错误几乎不言自明,FileManager 不允许您将文件移动到已存在同名 文件的文件夹中。

如果您想更改列表中文件的顺序,则不应再次加载文件,因为这会重置原始顺序。

如果您不打算在您的文件中显示多个文件夹,或者您不想添加将文件移动到另一位置的功能,您应该删除整 block 代码:

do {
try FileManager.default.moveItem(atPath: (documentURL?.path)!, toPath: (documentURL_Dest?.path)!)
} catch let error {
NSLog("Error in copying Data.plist: \(error)") // see the above quoted error message from here
}


refreshData()

否则,您应该相应地处理错误(例如,显示警告,让用户知道该目录中已存在同名文件)。

关于ios - FileManager 更改不适用于重新排序并且具有 ErrorDomain Code=17 "File exists",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46553243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com