WebDAV Upload

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • WebDAV Upload

    Hallo,

    ich versuche nun seid einiger Zeit in meine App, als alternative zu Dropbox, einen WebDAV Sync einzubauen. Meine App kopiert sich eine SQLite Datenbank von Dropbox (oder später WebDAV) um mit dieser zu arbeiten. Wenn die Datenbank verändert wurde, wird sie wieder hochgeladen. Ich verwende für den WebDAV Kram dieses Github Projekt: github.com/amosavian/FileProvider

    Den Download habe ich soweit zum laufen bekommen, allerdings mag der Upload nicht. Problem dabei ist vermutlich, das ich den Upload aus unterschiedlichen Tableviewcontrolern anstoßen muss. Ich habe mir dazu eine "Common.swift" angelegt und diese ist aus allen Viewcontrolern aus erreichbar. Die Function wird auch aufgerufen


    Quellcode

    1. let webdavUp:WebDAVFileProvider? = WebDAVFileProvider(baseURL: srvurl!, credential: credential)!
    2. webdavUp?.copyItem(localFile: localURL, to: remotePath, overwrite: true, completionHandler: {
    3. error in
    4. if error != nil {
    5. print("Upload Error: \(error ?? "" as! Error)")
    6. }
    7. })
    aber landet nie im Completition Handler. Anscheinend reichen meine N00b Fähigkeiten in Swift zu Programmieren nicht aus und ich habe irgendwas nicht verstanden. Muss ich nun in jedem Viewcontroller in dem ich einen Upload haben will, die Function noch mal bauen, oder warum klappt der Upload nicht.

    Um gleich solche Fragen zu ersticken: Ja, die Credentials sind korrekt. Ich speichere die Credentials, sobald diese korrekt sind und der erste Download funktioniert, in der Keychain und hole diese für den Upload auch wieder aus der Keychain heraus.

    Schon mal danke für die Hilfe.
  • Das hatte ich auch schon in Form von

    Quellcode

    1. let webdavUp:WebDAVFileProvider?


    Danach dann:

    Quellcode

    1. webdavUp = WebDAVFileProvider(baseURL: srvurl!, credential: credential)!
    Ich sehe aber ehrlich gesagt nicht was das bringen soll, da es unnötige Zeilen Code erzeugt.

    Ok, zusammengefasst würde auch gehen:

    Quellcode

    1. let webdavUp:WebDAVFileProvider = WebDAVFileProvider(baseURL: srvurl!, credential: credential)!
    aber auch das behebt mein Problem nicht.

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von Qvex23 ()

  • Ich habe nun einiges durchprobiert, aber ich bekomme keinen Upload hin. Ich habe keine Ahnung warum. Wenn ich eine der anderen Überladungen von webdavUp?.copyItem verwende, wird eine 0kb Datei auf den WebDAV Server geschrieben. Das Beispielprojekte allerdings läuft problemlos.....

    Bin etwas verzweifelt und hoffe das noch jemand einen Einfall hat.
  • Es ging bei der Rückmeldung von t-no eher um die Typen als um die Schreibweise.

    Qvex23 schrieb:

    Quellcode

    1. let webdavUp:WebDAVFileProvider? = WebDAVFileProvider(baseURL: srvurl!, credential: credential)!
    2. webdavUp?.copyItem(localFile: localURL, to: remotePath, overwrite: true, completionHandler: {
    3. error in
    4. if error != nil {
    5. print("Upload Error: \(error ?? "" as! Error)")
    6. }
    7. })
    Deine erste Zeile deklariert und initialisiert webdavUp als Optional<WebDAVFileProvider>. Das ist bei dem init auch notwendig.
    Es kann sein, dass webdavUp mit nil initialisiert wird. In diesem Fall wird dann auch copyItem nicht aufgerufen und der completionHandler
    erst recht nicht.
    Hast du mal einen Breakpoint in Zeile 2 gesetzt und geprüft, was in webdavUp steht?

    Falls das nicht nil ist, kann du evtl. das Problem mit einem kleinen Testprogramm eingrenzen, in dem du nur den obigen Code
    und die notwendigen vorausgehenden Initialisierungen drin hast.
    Wenn es mit den Überladungen prinzipiell und im Beispielprojekte auch richtig funktioniert, muss ja ein Unterschied bei den
    Argumenten (bei init oder copyItem) sein.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von marcoo () aus folgendem Grund: Erst zu spät das mit dem Beispielprojekte gelesen.