0

私はXcodeとプログラミング言語が新しく、助けが必要です。メッセージアプリケーションで作業していて、Completion Handler Blockを使用できません。ここに私のコードは次のとおりです。Swift 3 Completion Handler Blockを正しく書き込む方法

 @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 = "" 
} 

私はperformBatchUpdatesにCATransaactionを使用していますが、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") 
     } 


    }) 

} 
関連する問題