Apple Watch усложнение сетевых запросов
Я создаю приложение погоды, которое извлекает информацию из онлайн-API.
Я могу получить информацию успешно в GlanceController и в InterfaceController. Тем не менее, я немного не уверен, как я должен сделать это для осложнения. Могу ли я выполнить сетевой запрос в классе ComplicationController?
Если так, как бы я поступил так?
1 ответ
Вы столкнетесь с проблемами, связанными с асинхронной загрузкой данных из источника данных усложнения, главным образом из-за данных, полученных после завершения обновления временной шкалы.
Apple рекомендует извлекать данные из другой части вашего приложения и предоставлять их до любого обновления:
Работа вашего класса источника данных заключается в предоставлении ClockKit любых запрошенных данных как можно быстрее. Реализации ваших методов источника данных должны быть минимальными. Не используйте методы источника данных для извлечения данных из сети, вычисления значений или выполнения каких-либо действий, которые могут задержать доставку этих данных. Если вам нужно получить или вычислить данные для вашей сложности, сделайте это в своем приложении iOS или в других частях вашего расширения WatchKit и кэшируйте данные в месте, где ваш источник данных о сложности может получить к ним доступ. Единственное, что должны делать ваши методы источника данных, это взять кэшированные данные и поместить их в формат, необходимый для ClockKit.
Другие способы приблизиться к этому:
Лучший способ обновить вашу сложность (со своего телефона после получения обновленных данных о погоде) - это использовать
transferCurrentComplicationUserInfo
,В качестве альтернативы вы можете иметь приложение для часов или кэш-память с самыми последними сведениями о погоде, которые будут доступны для следующего запланированного обновления.
Если вам абсолютно необходимо справиться с этим от осложнений:
У вас может быть запланированное обновление временной шкалы, чтобы получить расширение для запуска фоновой задачи NSURLSession для асинхронной загрузки информации из вашей службы погоды. Первое (запланированное) обновление закончится без новых данных. После получения новых данных о погоде вы можете выполнить второе (ручное) обновление, чтобы перезагрузить временную шкалу осложнений, используя только что полученные данные.
У меня нет личного опыта с этим подходом, в основном из-за ненужной необходимости последовательных обновлений временной шкалы.