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