Поток приложений для синхронизации фоновых задач iOS

Я программирую в iOS не так давно. Я в основном программировал связанные с пользовательским интерфейсом вещи, такие как анимация, пользовательские UIControls и т. Д

Мне нужно в моем новом приложении: Показать индикатор активности загрузки и в то же время:

  • загрузить некоторые удаленные данные с сервера, проанализировать их и сохранить в локальных основных данных
  • загрузить некоторые данные из локальных основных данных
  • получить позицию пользователя из службы определения местоположения

После этого у меня есть все данные, необходимые для отображения следующего вида контроллера и сброса индикатора загрузки.

Вопрос в том, как мне все это сделать? Мне нужно поддерживать iOS9, iOS10, 11, 12. Я понимаю, что это нужно делать в фоновых потоках, а затем мне нужно объединить все данные из каждой задачи и переключиться на контроллер следующего представления. Я не могу использовать какие-либо внешние библиотеки, такие как rx-swift или promise-kit. Может быть, есть какой-нибудь опытный разработчик iOS, который может дать мне несколько основных рекомендаций, как подходить к такого рода потокам приложений? Я могу представить, что есть много способов сделать это, некоторые из них лучше, а некоторые хуже. Любые рекомендации будут очень полезны для меня. Благодарю.

1 ответ

Это очень сложный вопрос, и, как вы сказали, все эти проблемы можно решить несколькими способами. Но наверняка я могу дать вам несколько советов о том, какие шаги лучше следовать:

  • Запустите в отдельном потоке управление всем, что касается связи по сети. Возможно, вы можете запустить его в отдельной очереди, используя класс DispatchQueue(). После того, как вы получили данные в том же потоке, возможно, вы сможете напрямую преобразовать эту информацию и сохранить ее в базе данных CoreData.
  • Для сохранения в CoreData вам сначала нужно знать, как он работает, поэтому в основном ищите действительно простое руководство о том, как создать с нуля вашу первую базу данных в XCode. После того, как вы сможете запустить и выполнить очень простой, вы сможете перейти ко второму шагу и попытаться интегрировать его с данными, которые вы ранее загрузили из сети. Вот хорошая статья для вас: https://www.raywenderlich.com/7569-getting-started-with-core-data-tutorial.
  • Чтобы получить местоположение является отдельной областью исследования, потому что вы должны изучить, какие фоновые режимы разрешены в iOS (а на самом деле разрешено только немногим). После этого вам нужно будет выяснить, к какой категории относится приложение для фоновой локации вашего программного обеспечения. После этого вам нужно углубиться и выяснить, как протокол и делегаты работают внутри Swift/Objective-C, чтобы правильно управлять последним значением местоположения, полученным датчиками. Вот хорошая статья для вас: https://www.raywenderlich.com/5247-core-location-tutorial-for-ios-tracking-visited-locations.
  • В конце, когда вы соединили все эти потоки, вы можете подумать о том, как отобразить индикатор загрузки. В основном вам нужно перетащить его из инструментов в раскадровку, связать его с помощью IBAction или IBOutlet, в зависимости от того, когда вы хотите его показать и в каком конкретном случае. А затем используйте относительный метод startAnimating или stopAnimating в правильном потоке кода (это действительно зависит от того, как вы структурировали все предыдущие пункты маркера).

Поскольку ваш вопрос носит очень общий характер и включает в себя множество подэтапов, в основном его действительно необходимо тщательно изучить и проанализировать. Я старался как можно больше суммировать наиболее важные пункты. Я надеюсь, что ссылки, которые я предложил вам, помогут немного. Удачи.

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