Как можно загрузить несколько изображений отдельно, если приложение не работает через REST API? - PullRequest
0 голосов
/ 04 сентября 2018

Я новичок в разработке для iOS, и мне хотелось бы знать, возможно ли загрузить несколько изображений в зависимости от конфигурации json (которая также загружается из Интернета).

Я понял, что мне нужно использовать:

URLSession(configuration: config, delegate: JsonSessionDelegate.shared, delegateQueue: nil)

Но здесь есть проблема. Мне нужно обновить мое приложение, например каждые 5 часов с новой конфигурацией и новыми изображениями. Конфигурация отдельного вызова REST GET такая же, как у каждого изображения.

Возможно ли получить json в фоновом режиме и зависит от того, json получает все изображения отдельно , сохраняет их в памяти и, когда приложение запускается, показывает их?

Вот мой код , AppDelegate:

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {            
        UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)  
        return true
    }

    func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        let config = URLSessionConfiguration.background(withIdentifier: "background")
        let session = URLSession(configuration: config, delegate: JsonSessionDelegate.shared, delegateQueue: nil)

        let task = session.downloadTask(with: getJsonUrl())
        task.resume()
    }

JsonSessionDelegate.swift:

    static var shared = JsonSessionDelegate()

    func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
        guard let data = try? Data(contentsOf: location) else { return }
        let json = try? JSONSerialization.jsonObject(with: data, options: .mutableContainers) as! [String: Any]

        for (_, id) in json! {
            let config = URLSessionConfiguration.background(withIdentifier: "bg2 \(id)")
            let session = URLSession(configuration: config, delegate: ImageDelegate.shared, delegateQueue: nil)

            let task = session.downloadTask(with: getImageUrl(id: id))
            task.resume()
        }
    }

и, наконец, ImageDelegate:

    static var shared = ImageDelegate()

    func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
        let data = try? Data(contentsOf: location)
        ...
        if allImagesLoaded() {
            saveImages()
        }
    }
...