2

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

func getNextRequestedUpdateDateWithHandler(handler: (NSDate?) -> Void) { 
    print("update") 
    handler(NSDate(timeIntervalSinceNow: NSTimeInterval(5*60)) 
} 

Нужны ли какие-либо настройки проекта для этого?

Я тестировал его с Xcode 7.1.1 и 7.2 Beta 4

ответ

3

Вы должны handle the scheduled update, когда это происходит, или ClockKit перестанут задавать новые записи временной шкалы:

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

В начале запланированного обновления ClockKit вызывает либо запрошенный методUpdateDidBegin, либо метод requestUpdateBudgetExhausted, в зависимости от состояния бюджета вашего осложнения. Вы должны реализовать один или оба из этих методов, если хотите добавить данные на свою временную шкалу. Ваша реализация этих методов должна продлевать или перезагружать временные рамки вашего осложнения по мере необходимости. Когда вы это сделаете, ClockKit запрашивает новые записи временной шкалы из вашего источника данных. Если вы не продлеваете или не обновляете свою временную шкалу, ClockKit не запрашивает никаких новых записей временной шкалы.

Возможно, у вашего источника данных отсутствует способ requestedUpdateDidBegin. Вот пример, иллюстрирующий, как продлить сроки, когда происходит обновление:

// MARK: - Responding to Scheduled Updates 

func requestedUpdateDidBegin() { 
    let server=CLKComplicationServer.sharedInstance() 

    for complication in server.activeComplications { 
     server.extendTimelineForComplication(complication) 
    } 
} 

Обратите внимание, что минимальный интервал обновления 10 минут, так что вы не будете называть каждые 5 минут, как вы ожидаете. Частые обновления также могут исчерпать бюджет обновления. Apple рекомендует разработчикам:

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

+0

Нужно ли комментировать «handleBackgroundTasks» в ExtensionDelegate для методов requestUpdate для запуска? Я где-то читал, что watchOS игнорирует методы requestUpdate, если выполняется handleBackgroundTasks. – Cindeselia

Смежные вопросы