2017-02-20 3 views
0

Ich benutze Parsen, um einige Dateien auf das Gerät herunterzuladen, und alles ist gut, aber ich möchte dann die Datei aus dem Standard-Cache-Verzeichnis, in dem Pars sie speichert (/ Library/Caches/PFFileCache /) zu verschieben irgendwo stabiler sagen die Benutzer Dokumente Verzeichnis.Datei nach dem Herunterladen verschieben

Die lokalisierte Fehler ich bin immer ist:

Error: “7b54d8a0f1a64b710058d4408ca4d696_The%20Name%20of%20the%20Wind%2029-92.mp3” couldn’t be moved to “Documents” because either the former doesn't exist, or the folder containing the latter doesn't exist. 

Aber ich bin sicher, dass beide existieren. Es kann etwas mit dem Namen zu tun haben, als wenn ich den Namen aus dem PFFile gepackt habe, hat er nicht den codierten% 20 im Dateinamen.

Dies ist mein Code-Block:

let cachedPFFile = object.object(forKey: "partAudio") as! PFFile 
     print(cachedPFFile) 
    let getCachedFilePath = cachedPFFile.getPathInBackground() 
     getCachedFilePath.waitUntilFinished() 
    let cachedFilePath = getCachedFilePath.result as! String 
     print(cachedFilePath) 

    let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask) 
    let documentsDirectory = String(describing: paths[0]) 

    let saveDirectory = documentsDirectory.appending(cachedPFFile.name) 

     print(documentsDirectory) 
     print(saveDirectory) 

    let fileManager = FileManager.default 

    if fileManager.fileExists(atPath: saveDirectory) == false { 

     do { 
      try fileManager.moveItem(atPath: cachedFilePath, toPath: saveDirectory) 
      print("Move successful") 
     } catch let error { 
      print("Error: \(error.localizedDescription)") 
     } 

    } 

Dies ist das gesamte Protokoll:

<PFFile: 0x608000458f00> 
2017-02-20 18:42:35.430 ParseStarterProject-Swift[2260:55934] Warning: A long-running operation is being executed on the main thread. 
Break on warnBlockingOperationOnMainThread() to debug. 
/Users/Genie/Library/Developer/CoreSimulator/Devices/A2FB00CE-B018-4FDF-9635-35FD6678DF8D/data/Containers/Data/Application/BA7C112C-BECB-4734-8C67-A9CB84F0E1F3/Library/Caches/Parse/PFFileCache/7b54d8a0f1a64b710058d4408ca4d696_The%20Name%20of%20the%20Wind%2029-92.mp3 
file:///Users/Genie/Library/Developer/CoreSimulator/Devices/A2FB00CE-B018-4FDF-9635-35FD6678DF8D/data/Containers/Data/Application/BA7C112C-BECB-4734-8C67-A9CB84F0E1F3/Documents/ 
file:///Users/Genie/Library/Developer/CoreSimulator/Devices/A2FB00CE-B018-4FDF-9635-35FD6678DF8D/data/Containers/Data/Application/BA7C112C-BECB-4734-8C67-A9CB84F0E1F3/Documents/7b54d8a0f1a64b710058d4408ca4d696_The Name of the Wind 29-92.mp3 
Error: “7b54d8a0f1a64b710058d4408ca4d696_The%20Name%20of%20the%20Wind%2029-92.mp3” couldn’t be moved to “Documents” because either the former doesn't exist, or the folder containing the latter doesn't exist. 

Ich bin durch diese verwirrt, weil sowohl die Datei und das neue Verzeichnis vorhanden ??

obwohl ich bin mir nicht sicher über die "file: /// Benutzer", da dies nicht funktioniert in Finder, muss den wahren Pfad "/ Benutzer" verwenden, wie kann ich "file: //" aus entfernen der Anfang der Schnur ??

Auch ich habe SO ohne Glück auf, wie man die% 20 in den Leerzeichen des Dateinamens hinzufügen keine der offensichtlichen Optionen scheint zu arbeiten.

Antwort

1

Sie haben Threading-Probleme. Deine ganze Vorstellung von "waitUntilFinished" ist falsch. Sie können den Hauptthread nicht blockieren - und Sie erhalten eine Warnung, die Ihnen das sagt. Höre auf diese Warnung!

Rufen Sie nicht getFilePathInBackground, und warten Sie nicht auf den Download zu beenden. Rufen Sie stattdessen getFileInBackgroundWithBlock: und innerhalb des Blocks mit dem Rest Ihres Codes, d. H. Verschieben Sie die Datei.

+0

Ich habe das ursprünglich versucht, aber es gab keinen Pfad zurück, also ging mit dem waituntilfinished(). Sie haben Recht, sehen Sie es sich noch etwas genauer an. Das Problem mit meinem erstellten Pfad zum Dokumentenordner war die Datei: // Wenn ich das entferne, verschiebt es die Datei – WanderingScouse

+0

"aber es gab keinen Pfad zurück" Es übergibt den Pfad _in den Block_. – matt

+0

Ich habe es gerade noch einmal probiert und es reicht es dem Block. Aus irgendeinem Grund hatte ich es in meinem Kopf, dass es nicht war ?? – WanderingScouse

Verwandte Themen