无法使用Swift更新Parse中的图像文件列

问题描述:

我在表视图中选择一个单元格,将值传递给视图控制器,然后允许用户使用下面的代码更新Parse(在Heroku上运行)上的行。无法使用Swift更新Parse中的图像文件列

我正面临的问题是 - “标题”列被更新,但图像文件列不会更新选定的新图像。我可以看到新图像确实被传入了代码中。

我使用同步调用,因为不希望用户先行,除非保存记录。

什么可能是错的?相同的代码来保存一个新的对象工作正常。

感谢 阿希什

   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

你可以请执行该文件的save()函数,看看你是否得到结果?另外我注意到你正在执行对服务器的同步调用,这会卡住你的主线程,你可以通过调用saveInBackground在后台线程上执行并不保存 –

+0

我没有在文件上运行save(),但没有也工作。我正在使用unwind segue故意进行同步调用,所以如果我使用saveInBackground,那么线程将在保存完成后返回,而我不想要。 – ashishn

+0

你可以粘贴你的imageOutlet定义的代码吗? –

我跑在我身边一些测试,此代码的工作对我来说:

Aync版本

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.") 
     } 


    } 

同步版本

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

您正在创建新对象。尝试保存此对象ID的新文件。 – ashishn

+0

为现有对象保存新文件? –

+0

我更新了我的答案。我首先获取所有对象,然后更新结果中第一个对象的文件并保存。它对我来说正如预期的那样。 –