小编Bri*_*Leg的帖子

如何正确使用DispatchQueue.main.async?

我的应用程序中有一个循环,可能需要几秒钟的时间来处理。

我希望当循环在后台运行时屏幕立即关闭。

这可能吗?

我尝试过仅添加循环:


DispatchQueue.main.async {
                for _ in 1...self.numberOfTransactionsToAdd {
                    
                    let newTransaction = Transaction()
                    
                    var timeAdded = 1.months
                    newTransaction.transactionAmount = self.amountTextField.text!.toDouble()
                    newTransaction.transactionDescription = self.descriptionTextField.text
                    newTransaction.transactionDate = self.datePicked
                    newTransaction.transactionCategory = self.categoryPicked
                    newTransaction.repeatInterval = self.repeatInterval
                    newTransaction.transactionSubCategory = self.subcategoryPicked
                    newTransaction.subCategoryName = self.subcategoryPicked!.subCategoryName
                    
                  
                    try! self.realm.write {
                        self.realm.add(newTransaction)
                    }
                    
                    self.datePicked = self.datePicked + timeAdded
                }
            }
                
            }

Run Code Online (Sandbox Code Playgroud)

我尝试添加整个功能:

    @IBAction func doneButtonPressed(_ sender: UIButton) {
        
        self.dismiss(animated: true, completion: nil)

        DispatchQueue.main.async {

            self.saveTransaction()

        }
        
    }
Run Code Online (Sandbox Code Playgroud)

但在视图消失之前屏幕仍然挂起。

这是我第一次使用DispatchQueue。我读过苹果公司的相关文档,但内容非常模糊。

这是解决这个问题的正确方法吗?

有人可以帮助指导新手采取正确的方法吗?

asynchronous for-loop swift dispatch-queue

3
推荐指数
1
解决办法
6095
查看次数

标签 统计

asynchronous ×1

dispatch-queue ×1

for-loop ×1

swift ×1