无法使用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
}
我跑在我身边一些测试,此代码的工作对我来说:
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")
}
您正在创建新对象。尝试保存此对象ID的新文件。 – ashishn
为现有对象保存新文件? –
我更新了我的答案。我首先获取所有对象,然后更新结果中第一个对象的文件并保存。它对我来说正如预期的那样。 –
你可以请执行该文件的save()函数,看看你是否得到结果?另外我注意到你正在执行对服务器的同步调用,这会卡住你的主线程,你可以通过调用saveInBackground在后台线程上执行并不保存 –
我没有在文件上运行save(),但没有也工作。我正在使用unwind segue故意进行同步调用,所以如果我使用saveInBackground,那么线程将在保存完成后返回,而我不想要。 – ashishn
你可以粘贴你的imageOutlet定义的代码吗? –