我有一个BaseViewController,我继承了2个ViewControllers。它们都有一个小的播放器部分,并根据我想要更新该UI的音乐类型。
所以我将代码保存在BaseViewController中,并通过我从其中一个继承的ViewControllers触发的Notification调用它
但我遇到的问题是,UI不会正确更新,图像永远不会加载,有时文本字段也不会更新。
func updatePlayerViewWithLiveDetails() {
guard let user = SWMusicManager.sharedInstance.liveUser else { return }
DispatchQueue.main.async {
self.bottomView.liveSharedBy.text = "Shared by \(user.username ?? "")"
if let followersCount = user.followers {
self.bottomView.liveListenersLabel.text = String(describing: followersCount)
}
}
if let profilePictureURL = user.profilePictureUrl {
SWServiceController().downloadImageFrom(profilePictureURL, completion: { (success, data) in
if success {
guard let imageData = data else { return }
guard let image = UIImage(data: imageData) else { return }
DispatchQueue.main.async { [weak self] in
self?.bottomView.profileImageView.image = image
}
}
})
}
我有办法解决这个问题。
编辑1:我知道代码被执行了两次,因为它已经被继承了两次并且存在于tab-controller中。