Как правильно реализовать перенос настроек из приложения iOS в услугу watchOS2
Я хочу добиться следующего:
Осложнения обновляются в фоновом режиме с интервалом в 30 минутОсложнения обновляются всякий раз, когда приложение для часов запускает и получает собственные обновленные данные.Сложности обновляются всякий раз, когда приложение iOS запускается, и пользователь изменяет настройку, которая влияет на данные наблюдения (например, изменение местоположения наблюдений за погодой или единиц отображения)Пункты 1. и 2. кажутся простыми и хорошо рассмотрены здесь:Какова последовательность обновления данных об осложнениях для Apple Watch?
Однако для пункта 3 в приложении для iOS я настроил экземпляр WCSession и вызвал TransferCurrentComplicationUserInfo, отправив новые настройки как NSDictionary. В расширении наблюдения это вызывает didReceiveUserInfo в WCSessionDelegate.
- (void)session:(WCSession *)session didReceiveUserInfo:(NSDictionary<NSString *,id> *)userInfo {
// Code here to apply the new settings
// ....
// Invoke a NSUSRLSession-based web query to get new data
[self queryForNewDataWithCompletionHandler:^(NCUpdateResult result) {
if (result == NCUpdateResultNewData) {
// Have new data from web to display
CLKComplicationServer *server = [CLKComplicationServer sharedInstance];
for (CLKComplication *complication in server.activeComplications) {
[server reloadTimelineForComplication:complication];
}
}
// Set date for next complication update to 30 mins from now
// ...
}];
}
Проблема, с которой я сталкиваюсь, заключается в том, что watchOS вызывает требуемыйUpdateDidBegin в отдельном потоке, вскоре после того, как он вызвал didReceiveUserInfo, и это начинает выполняться ДО того, как у меня появится возможность получить обновленные данные с использованием новых настроек в недавно полученном словаре UserInfo из приложения.
Следовательно, сложности обновляются два раза подряд - один раз, когда WatchOS вызвал requestUpdateDidBegin, который просто обновляет сложность с существующими (устаревшими) данными, прежде чем я очень скоро получу новые данные из Интернета, а затем должен будет их обновить. снова в моем собственном коде.
Это кажется ненужным и пустой тратой ресурсов, не говоря уже об ограниченном бюджете обновлений, которые Apple разрешает (предположительно 2 в час).
Я что-то здесь не так делаю? Как я могу запретить watchOS2 вызывать requestUpdateDidBegin до того, как у меня появится возможность получить новые данные из Интернета?