Я розробляю додаток, який вимагає завантаження великої кількості даних при першому запуску (близько 1 гб зображень). В даний час я використовую бібліотеку MZDownloadManager для виконання завантажень. Бібліотека реалізує фонові режими для завантаження, і я навіть налаштовую його на можливості моєї цілі. У принципі, у мене такий сценарій:
- Я називаю API, який дає мені json
- Я зберігаю всі дані в основних даних
- Я зберігаю всі URL-адреси зображень для завантаження в масив
- Я зберігаю основні дані
- Я починаю завантаження
- Я завантажую 1 товар одночасно
- Коли елемент закінчується, я зберігаю локальний шлях в Core Data і видаляє його з масиву URL-адрес
- Я починаю нове завантаження
- Коли все завершиться, я покажу користувальницький інтерфейс, який приховує панель просування
Я хочу дати користувачеві можливість поставитидодаток у фоновому режимі під час завантаження. Це добре працює на тренажері, але не на пристрої. Я думаю, що на тренажері працює завдяки великій кількості пам'яті Mac. У вас є пропозиції?
Відповіді:
0 для відповіді № 1The NSURLSession
клас підтримує фонове завантаження файлів. Він буде завантажувати ваші файли, навіть якщо ваш додаток закінчиться, і перезапустить вас у фоновому режимі, коли завантаження буде завершено, якщо буде потрібно.
0 для відповіді № 2
Щоб підтримувати фонові завантаження, потрібно налаштувати свій NSURLSession
об'єкт Щоб налаштувати сеанс, спочатку потрібно створити NSURLSessionConfiguration
об'єкт і встановити кілька властивостей до відповідних значень. Потім ви передаєте цей об'єкт конфігурації у відповідний метод ініціалізації NSURLSession
під час створення вашого сеансу.
Для створення об'єкта конфігурації, який підтримує завантаження фону, виглядає наступним чином:
- Спочатку створіть конфігураційний об'єкт за
backgroundSessionConfigurationWithIdentifier
: методNSURLSessionConfiguration
. - Налаштуйте будь-які інші властивості, наприклад
sessionSendsLaunchEvents
іdiscretionary
об'єкту конфігурації, як доречно. - Використовуйте об'єкт конфігурації, щоб створити його
NSURLSession
об'єкт
Приклад: -
let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("bgSessionConfiguration")
configuration.discretionary = true
configuration.allowsCellularAccess = true //default true
let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil)