0

Я новичок в Xcode и языках программирования, и мне нужна ваша помощь. Я работаю над приложением Message, и я не могу использовать блок обработчика завершения. Вот мой код:Swift 3 Как правильно написать блок обработчика завершения

 @IBAction func SendButton(_ sender: AnyObject) { 


    if self.textfield.text != "" { 


     let mess = CKRecord(recordType: "Message") 
     mess["content"] = textfield.text as CKRecordValue? 

     let publicdata = CKContainer.default().publicCloudDatabase 

     publicdata.save(mess, completionHandler: {(record, error) -> Void in 
      if error == nil { 


       let indexpath = NSIndexPath(item: self.chat.count, section: 0) 


       CATransaction.begin() 
       CATransaction.setDisableActions(true) 


       self.CollView.performBatchUpdates ({ 

        self.chat.insert(mess, at: self.chat.count) 
        self.CollView.insertItems(at: [indexpath as IndexPath]) 


       }, completion: {(true) -> Void in 

       print("Animation completed") 
       self.CollView.contentOffset = CGPoint(x: 0, y: 40) 

       }) 

       CATransaction.commit() 

      print("SAVED") 


      }else{ 
      print("error") 
      }}) 

    } 

    textfield.text = "" 
} 

Я использую CATransaaction для performBatchUpdates, но завершение Handler блок в методе performBatchUpdates не может быть завершена. Как вы можете видеть, это неправильный способ написать это, и я это знаю, но я пробовал все, что я знаю, чтобы добиться этого, но это не так. Завершение строительства:

completion: {(true) -> Void in 

      print("Animation completed") 
      self.CollView.contentOffset = CGPoint(x: 0, y: 40) 

      }) 

Пожалуйста, помогите мне. Спасибо !!

+0

Здравствуйте, вы можете разместить вашу функцию publicdata.save пожалуйста – Makaille

ответ

1

вы можете попробовать это

collectionView?.performBatchUpdates({ 
       print("First part") 
      }, completion: { (result: Bool) in 
       print("Second part") 
      }) 
0
func loadData() { 
    chat = [CKRecord]() 


let publicData = CKContainer.default().publicCloudDatabase 


    let query = CKQuery(recordType: "Message", predicate: NSPredicate(format: "TRUEPREDICATE", argumentArray: nil)) 
    query.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)] 

    publicData.perform(query, inZoneWith: nil, completionHandler: {(results, error) -> Void in 

     if let text = results { 
     self.chat = text 
      DispatchQueue.global(qos: DispatchQoS.QoSClass.default).async {() -> Void in 
       self.CollView.reloadData() 
      } 


     }else{ 
     print("error") 
     } 


    }) 

}