iOS не позволяет вашему приложению поддерживать запущенные процессы так, как вам нравится, пока приложение работает в фоновом режиме. Когда он будет задним фоном, у вас будет немного времени для выполнения некоторых задач (около пары минут), прежде чем он остановится.
Затем вам нужно использовать фоновую выборку, чтобы периодически получать новую информацию для вашего приложения.
На веб-сайте Ray Wenderlich имеется хорошее руководство по различным режимам фона, поддерживаемым iOS: RayWenderlich - Режимы фона .
Существует также руководство на портале разработчиков Apple , в котором объясняется, что вы можете и не можете делать, когда приложение работает в фоновом режиме.
Реализация долгосрочных задач
Для задач, для реализации которых требуется больше времени выполнения, необходимо запросить определенные разрешения для их запуска в фоновом режиме без их приостановки. В iOS в фоновом режиме разрешено запускать только определенные типы приложений:
- Приложения, которые воспроизводят звуковой контент для пользователя в фоновом режиме, например приложение музыкального проигрывателя
- Приложения, которые записывают аудиоконтент в фоновом режиме
- Приложения, которые постоянно информируют пользователей об их местонахождении, например приложение для навигации
- Приложения, поддерживающие передачу голоса по Интернет-протоколу (VoIP)
- Приложения, которые должны регулярно загружать и обрабатывать новый контент
- Приложения, которые регулярно получают обновления от внешних аксессуаров
- Приложения, которые реализуют эти сервисы, должны декларировать сервисы, которые они поддерживают, и использовать системные инфраструктуры для реализации соответствующих аспектов этих сервисов.
Объявление сервисов позволяет системе узнать, какими сервисами вы пользуетесь, но в некоторых случаях именно системные платформы фактически препятствуют приостановке вашего приложения.
UPDATE:
Во-первых, я бы не помещал свой код обновления в ViewController, возможно, VC не находится в памяти во время операции фоновой выборки. Создайте отдельный класс или что-то, что связано с извлечением и хранением данных, а затем в функции ViewControllers viewWillAppear
загрузите последние доступные данные.
Для тестирования операций фоновой выборки в xcode выберите Debug из меню, а затем выберите Simulate Background Fetch. Это запустит приложение и вызовет функцию performFetchWithCompletionHandler
.