web-dev-qa-db-fra.com

Comment télécharger des images async pour widgetkit

Je développe des widgets pour iOS et je ne sais vraiment pas comment télécharger des images pour les widgets.

Le widget télécharge actuellement une gamme d'objets et chaque objet a une URL d'une image. L'idée est que chaque objet fait un SimpleEntry pour le Timeline.

Quelle est la meilleure façon de réaliser cela? Je lis que les widgets ne devraient pas utiliser le ObservableObject. Je récupère l'ensemble d'objets dans le fournisseur de chronologie, ce qui semble être ce que Apple recommande-t-il. Mais puis-je télécharger aussi les images là-bas et j'attends que tous sont effectués pour envoyer la chronologie?

Tout conseil serait très utile,

7
Joan Cardona

Je n'ai pas de bonne solution, mais j'essaie d'utiliser WidgetCenter.shared.reloadAllTimelines(), et cela fait du sens. Dans le code suivant.

var downloadImage: UIImage?

func downloadImage(url: URL) -> UIImage {
    
    var picImage: UIImage!
    
    if self.downloadImage == nil {
        
        picImage = UIImage(named: "Default Image")
        
        DispatchQueue.global(qos: .background).async {
            do {
                let data = try Data(contentsOf: url)
                DispatchQueue.main.async {
                    self.downloadImage = UIImage.init(data: data)
                    if self.downloadImage != nil {
                        DispatchQueue.main.async {
                            WidgetCenter.shared.reloadAllTimelines()
                        }
                    }
                }
            } catch { }
        }
    } else {
        picImage = self.downloadImage
    }
    
    return picImage
}

De plus, vous devez prendre en compte quand supprimer cette image. Ceci comme tableView.reloadData().

0
yang lu