2017-10-03 5 views
1

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:

how my table view displays

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 

Répondre

0

L'erreur est à peu près explicite, FileManager ne vous déplacez pas laisser un fichier dans un dossier où un fichier avec la le même nom existe déjà.

Vous ne devez pas charger à nouveau les fichiers si vous souhaitez modifier les fichiers dans votre liste, car cela réinitialisera l'ordre d'origine.

Si vous ne prévoyez pas de montrer plus d'un dossier dans votre fichier ou que vous ne voulez pas ajouter une fonction pour déplacer les fichiers vers un autre emplacement, vous devez supprimer ce morceau ensemble de votre code:

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() 

Sinon, vous devez gérer l'erreur en conséquence (par exemple, afficher une alerte pour indiquer à l'utilisateur qu'un fichier existe déjà avec le même nom dans ce répertoire).

+0

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 –

+0

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

+0

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, –