【问题标题】:Swift: returned result is repeated using DispatchQueue.global (qos: .userInitiated) .asyncAfterSwift:使用 DispatchQueue.global (qos: .userInitiated) .asyncAfter 重复返回的结果
【发布时间】:2020-06-05 07:45:05
【问题描述】:

我有以下代码: (里面:ServerApiManager.sharedInstance.fetchMessages是调用api的函数)。

返回的结果是:

====didRequestReloadThread ATC Chat Thread

DispatchQueue.global

633

fetchMessages

DispatchQueue.global

633

fetchMessages

ServerApiManager.sharedInstance.fetchMessage

DispatchQueue

DispatchQueue messagesCollectionView

ServerApiManager.sharedInstance.fetchMessage

DispatchQueue

DispatchQueue messagesCollectionView

==> Wrong result because of duplicate.

预期结果是:

====didRequestReloadThread ATC Chat Thread

DispatchQueue.global

633

fetchMessages

ServerApiManager.sharedInstance.fetchMessage

DispatchQueue

DispatchQueue messagesCollectionView

谁能帮忙?

DispatchQueue.global(qos: .userInitiated).asyncAfter(deadline: .now() + 5) {

            print("DispatchQueue.global")
            if(self.messages.count > 0){
                let lastMessage = self.messages[self.messages.count-1]
                print(633)
                ServerApiManager.sharedInstance.fetchMessages(channel: self.channel, minId: lastMessage.id ?? 0, loggedInUser: self.user, onSuccess: { (messages) -> () in
                    self.messages.append(contentsOf: messages)
                    print("ServerApiManager.sharedInstance.fetchMessage")
                    MessageStorage.sharedInstance.messageDic[self.channel.id] = self.messages
                    print("DispatchQueue")
                    DispatchQueue.main.async {
                        print("DispatchQueue messagesCollectionView" )
                        self.messagesCollectionView.reloadData()
                        self.messagesCollectionView.scrollToBottom()
                    }

                }, onFailure: { (msg, logged) -> () in

                });
            }
}

【问题讨论】:

    标签: ios swift dispatch-queue


    【解决方案1】:

    如日志所示,此代码块调用了两次。因此,您应该检查您调用此代码的位置并找出它被调用两次的原因。您可以使用 break ponits 检查堆栈跟踪以查找此方法第二次调用的位置。

    【讨论】:

      猜你喜欢
      • 2018-02-05
      • 2017-12-22
      • 2014-05-07
      • 2017-07-26
      • 2017-12-29
      • 2019-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多