Je suis complètement nouveau pour iOS et Swift.Les modifications FileManager ne fonctionnent pas pour le réordonnancement et a ErrorDomain Code = 17 "Fichier existe"
Je veux mettre en œuvre le mode d'édition pour mon point de vue de la table qui affiche une liste de fichiers comme l'image ci-dessous:
Tout fonctionne très bien en mode édition, et mes codes fonctionne très bien dans la suppression, mais quand je change la place de mes fichiers en les faisant glisser, ils reviennent à leur première place à chaque fois. Le code pour changer le gestionnaire de fichiers Wold ne fonctionne pas et il a cette erreur:
NSUnderlyingError=0x1c0249c90 {Error Domain=NSPOSIXErrorDomain Code=17 "File exists"}}`
Cette ligne n'appellera:
do {
try FileManager.default.moveItem(atPath: (documentURL?.path)!, toPath: (documentURL_Dest?.path)!)
}
Ici, c'est ma fonction moveRowAt
dans le contrôleur de vue:
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()
}
et voici ma fonction 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()
}
J'ai mis ce code de ligne pour activer le mode d'édition en viewDidLoad
:
self.navigationItem.rightBarButtonItem = self.editButtonItem
merci beaucoup pour votre aide. c'est juste et je n'ai pas besoin de deux copies de mes fichiers dans le dossier, j'ai juste besoin de trouver une solution pour que les documents de réorganisation fonctionnent correctement, maintenant mon problème est que quand je change la place de mes éléments dans la liste et exécutez-le à nouveau toutes les modifications réinitialiser à sa valeur par défaut. cela se produit à chaque fois que refreshData s'exécute. pouvez-vous me proposer une solution ou un tutoriel? Appréciez –
Vous devez enregistrer la commande dans 'UserDefaults' ou dans une base de données quelconque. En savoir plus à ce sujet [ici] (https://www.hackingwithswift.com/example-code/system/how-to-save-user-settings-using-userdefaults). – the4kman
merci beaucoup J'ai lu la page que vous recommandez. très utile mais je suis nouveau à rapide et confus. J'ai besoin d'un peu plus d'aide. Est-il possible de mettre à jour et de me dire quelques codes de NsUserDefaults si possible. Appréciez, –