1

Я создаю приложение погоды, которое извлекает его информацию из онлайн-API.Запросы сетевых приложений Apple Watch

Я могу получить информацию успешно в GlanceController и в InterfaceController. Тем не менее, я немного уверен в том, как я должен это делать для усложнения. Могу ли я выполнить сетевой запрос в классе ComplicationController?

Если да, то как мне это сделать?

ответ

1

Вы столкнетесь с issues related to asynchronously fetching data from within the complication data source, главным образом из-за полученных данных после обновление временной шкалы завершено.

компании Apple рекомендует fetch the data from a different part of your app, and have it available in advance of any complication update:

Работа вашего класса источника данных, чтобы обеспечить ClockKit любую запрашиваемую информацию как можно быстрее. Реализации ваших методов источника данных должны быть минимальными. Не используйте методы источников данных для извлечения данных из сети, вычисления значений или выполнения каких-либо действий, которые могут задержать доставку этих данных. Если вам нужно получить или вычислить данные для вашего усложнения, сделайте это в своем приложении iOS или в других частях расширения WatchKit и кешируйте данные в том месте, где ваш источник данных осложнений может получить к нему доступ. Единственное, что должны сделать ваши методы источника данных, - это взять кэшированные данные и поместить их в формат, который требуется ClockKit.

Другие способы приблизиться к нему:

  • Лучший способ обновить осложнение (с телефона, как только вы получили обновленные данные о погоде) является использование transferCurrentComplicationUserInfo.

  • В качестве альтернативы, вы можете использовать свое приложение для наблюдения за часами или его кэш-память, чтобы получить последние данные о погоде, которые будут доступны для следующего запланированного обновления.

Если вы абсолютно необходимо справиться с осложнением:

Вы могли бы запланированное обновление временной шкалы получить расширение, чтобы начать NSURLSession фоновую задачу асинхронно загрузить информацию из вашей службы погоды. Первое (запланированное) обновление закончится без новых данных. После получения новых данных о погоде вы можете выполнить второе (ручное) обновление, чтобы перезагрузить временную шкалу осложнений с использованием только что полученных данных.

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