web-dev-qa-db-ja.com

WidgetKitの場合はAsyncをダウンロードする方法

私はiOSのためのウィジェットを開発しています、そして私は本当にウィジェットの画像をダウンロードする方法がわかりません。

ウィジェットは現在オブジェクトの配列をダウンロードし、すべてのオブジェクトには画像のURLがあります。このアイデアは、すべてのオブジェクトがSimpleEntryTimelineにすることです。

これを達成するための最良の方法は何ですか?そのウィジェットはObservableObjectを使用しないでください。タイムラインプロバイダ内のオブジェクトのセットを取得します。これはApple推奨するものです。しかし、私はそこにイメージをダウンロードしてください、そして私はすべての時間を送信するためにすべてが行われるまで待ちますか?

あらゆるアドバイスは非常に役立ちます、

7
Joan Cardona

私は良い解決策を持っていませんが、私はWidgetCenter.shared.reloadAllTimelines()を使用しようとしています。次のコードで。

_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
}
_

また、この写真を削除するときに考慮する必要があります。これはtableView.reloadData()のようなものです。

0
yang lu