быстрое изображение с URL-адреса загрузки в локальное хранилище - PullRequest
0 голосов
/ 29 апреля 2018
DispatchQueue.global().async {
     let data = try? Data(contentsOf: url!)
     DispatchQueue.main.async {
          let img = UIImage(data: data!)
     }
}

Как сохранить изображение, возвращенное из данных (contentsOf: url!) , в локальное хранилище iPhone, чтобы не загружать его каждый раз, когда пользователь запускает приложение?

Я знаю, что некоторые приложения загружают много данных и изображений каждое обновление, чтобы сэкономить на размере приложения, которое загружается из App Store. Как это возможно?

Другое дело, что изображение будет использоваться в узле SKSpriteNode, а не в UIImageView. Не спешите отображать изображения, так как они будут загружены во время загрузки игры.

1 Ответ

0 голосов
/ 29 апреля 2018

Вы не должны использовать Data(contentsOf:) инициализатор для извлечения нелокальных ресурсов. Если вы пытаетесь сохранить его на диск, нет необходимости загружать его в память. Вы можете использовать метод URLSession downloadTask для асинхронной загрузки вашего файла на диск:


import UIKit
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true

let documents = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!

if let url = URL(string: "https://i.stack.imgur.com/xnZXF.jpg") {
    URLSession.shared.downloadTask(with: url) { location, response, error in
        guard let location = location else {
            print("download error:", error ?? "")
            return
        }
        // move the downloaded file from the temporary location url to your app documents directory
        do {
            try FileManager.default.moveItem(at: location, to: documents.appendingPathComponent(response?.suggestedFilename ?? url.lastPathComponent))
        } catch {
            print(error)
        }
    }.resume()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...