2016-07-30 8 views
0

Ich Auswählen einer Zelle in der Tabellendarstellung, vorbei Wert zu aktualisieren Controller anzuzeigen und dann erlauben Benutzer die Reihe auf Parse (läuft auf Heroku) unter Verwendung von Code zu aktualisieren.Nicht imstande Bilddatei in Spalte Parse Verwendung Swift

Ausgabe i bin vor ist - Spalte „Titel“ wird aktualisiert, aber Bild-Datei Spalte tut ausgewählt mit neuen Bild aktualisiert. Ich kann sehen, dass das neue Bild tatsächlich in den Code übertragen wird.

ich synchronen Aufruf verwenden, weil Sie nicht Benutzer will vorankommen, es sei denn Datensatz gespeichert wird.

was könnte falsch sein? Derselbe Code zum Speichern eines neuen Objekts funktioniert einwandfrei.

Dank Ashish

   let query = PFQuery(className:"class") 
       query.whereKey("objectId", containsString: passedObject.objectId) 

       do { 

        let results = try query.findObjects() 

        if results.count == 0 { 

         print("error") 

         success = false 

        } else { 
         //update 


         do { 

          let obj = results.first 

          obj!["title"] = Title.text! 

          let imageData = UIImageJPEGRepresentation(imageOutlet.image!,0.2) 
          let imageFile = PFFile(name: "image.png", data: imageData!) 


          //try imageFile?.save() // is this needed? 
          obj!["imagefile"] = imageFile 

          try obj!.save() 
          self.success = true 


         } catch let er as NSError { 

          print(" error while updating - \(er)") 
         } 

        } 
       } catch { 

        print("error while querying \(error)") 

        success = false 
       } 
+0

Können Sie bitte die save() Funktion auf die Datei ausführen und sehen, ob Sie Ergebnisse? Ich habe auch bemerkt, dass Sie die Synchronisierung Aufruf an den Server ausführen dies ist etwas, das Ihr Hauptthread stecken wird, können Sie dies auf dem Hintergrund-Thread ausgeführt werden kann durch saveInBackground Aufruf und nicht –

+0

speichern Ich habe laufen save() auf Datei, aber das tat es nicht arbeite auch. Ich mache sync-Aufruf absichtlich, wie ich mit abuse segue benutze, wenn ich saveInBackground benutze, dann wird Thread zurückgeben, bevor das Speichern abgeschlossen wird, was ich nicht will. – ashishn

+0

Können Sie bitte den Code Ihrer imageOutlet-Definition einfügen? –

Antwort

1

lief ich einige Tests auf meiner Seite und dieser Code funktioniert für mich:

Aync Version

let query = PFQuery(className: "FileTest") 
    query.findObjectsInBackgroundWithBlock { 
     (objects: [PFObject]?, error: NSError?) -> Void in 

     let imageData = UIImageJPEGRepresentation(self.imageOutlet.image!, 0.2) 
     let fileToSave = PFFile(name: "myfile.png", data: imageData!) 

     let firstObj = objects?.first 
     firstObj!["fileToSave"] = fileToSave 
     firstObj!.saveInBackgroundWithBlock { (success: Bool, error: NSError?) -> Void in 
      print("Object has been saved.") 
     } 


    } 

Sync Version

let query = PFQuery(className: "FileTest") 

    do { 
     let objects = try query.findObjects() 
     let firstObj = objects.first 

     let imageData = UIImageJPEGRepresentation(self.imageOutlet.image!, 0.2) 
     let fileToSave = PFFile(name: "myfile.png", data: imageData!) 
     firstObj!["fileToSave2"] = fileToSave 
     try firstObj!.save() 
     print("object saved") 


    } catch let er as NSError { 
     print("error") 
    } 
+0

Sie erstellen ein neues Objekt. Versuchen Sie, eine neue Datei für diese Objekt-ID zu speichern. – ashishn

+0

Speichern Sie eine neue Datei für ein vorhandenes Objekt? –

+0

Ich aktualisierte meine Antwort. Ich hole zuerst alle Objekte und aktualisiere dann die Datei für das erste Objekt im Ergebnis und speichere es. Es funktioniert für mich wie erwartet. –

Verwandte Themen