Как можно загрузить несколько изображений отдельно, если приложение не работает через REST API?

Я новичок в разработке для 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()
        }
    }

0 ответов

Другие вопросы по тегам