2016-07-30 2 views
0

Я выбираю ячейку в виде таблицы, передавая значение для просмотра контроллера, а затем разрешаю пользователю обновлять строку в Parse (работает на Heroku), используя код ниже.Невозможно обновить столбец imagefile в Parse using Swift

Проблема, с которой я столкнулся, - обновлен столбец «title», но столчик файла изображения не обновляется с выбранным новым изображением. Я вижу, что новое изображение действительно передается в код.

Я использую синхронный вызов, потому что не хочу, чтобы пользователь двигался вперед, если запись не сохраняется.

что может быть неправильным? Тот же код для сохранения нового объекта отлично работает.

Благодаря 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

Можете ли вы выполнить функцию save() в файле и посмотреть, получаете ли вы результаты? Также я заметил, что вы выполняете вызов синхронизации на сервере, это то, что застряло в вашем основном потоке, вы можете выполнить это в фоновом потоке, вызвав saveInBackground и не сохранить –

+0

Я выполнил файл save(), но это не так работа тоже. Я делаю вызов синхронизации намеренно, поскольку я использую unind segue, поэтому, если я использую saveInBackground, тогда поток вернется до сохранения завершений, которые я не хочу. – ashishn

+0

Можете ли вы вставить код вашего определения imageOutlet? –

ответ

1

Я провел несколько тестов на моей стороне, и этот код работает для меня:

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

Вы создаете новый объект. Попробуйте сохранить новый файл для этого идентификатора объекта. – ashishn

+0

Сохраните новый файл для существующего объекта? –

+0

Я обновил свой ответ. Сначала я извлекаю все объекты, а затем обновляю файл для первого объекта в результате и сохраняю его. Он работает для меня, как и ожидалось. –

Смежные вопросы