3

Итак, после стольких испытаний и онлайн-исследований, я должен отказаться и попросить о помощи. WatchOS 2.WatchOS 2 Complication Scheduled Update In Background

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

Я знаю, что обновление в фоновом режиме предусмотрено в бюджете, поэтому я пытаюсь обновить время каждые 10 минут. Надеюсь, что сбор NSDate прост, это не заставит меня идти «за бюджет», что бы это ни значило.

Я сейчас игнорирую путешествия во времени и предоставляю временную шкалу. Вместо этого я просто заполнив большой шаблон модуля с текущим временем в:

func getCurrentTimelineEntryForComplication(complication: CLKComplication, withHandler handler: (CLKComplicationTimelineEntry?) -> Void) { 

Я тогда это:

func getNextRequestedUpdateDateWithHandler(handler: (NSDate?) -> Void){ 
    handler(NSDate(timeIntervalSinceNow: 60*10)); 
} 

И это:

func requestedUpdateDidBegin(){ 
    NSLog("requestedUpdateDidBegin") 
    let complicationServer = CLKComplicationServer.sharedInstance() 
    for complication in complicationServer.activeComplications { 
     complicationServer.reloadTimelineForComplication(complication) 
    } 
} 

обновление никогда не происходит хоть. Только запустив расширение и запустив тот же код, что и 4 строки выше, могу ли я получить обновление для обновления. Из-за просмотра журналов все, что происходит после принудительного обновления, заключается в том, что метод getNextRequestedUpdateDateWithHandler вызывается, но ничего другого.

Любые предложения или что-то, что я, очевидно, отсутствует? Большое спасибо за чтение.

+0

У меня точно такая же проблема. Я попытался использовать NSTimer в качестве альтернативы, но это приводит только к ошибке чтения памяти. – gallileo

ответ

2

Я думаю, вам нужно реализовать:

func getCurrentTimelineEntryForComplication(complication: CLKComplication, withHandler handler: ((CLKComplicationTimelineEntry?) -> Void)) 

метода вы реализовали getTimelineEntriesForComplication(complication: CLKComplication, beforeDate... только вызывается, когда сервер осложнения собирают записи по временной шкале для поездки вперед времени.

Учитывая сценарий вы описываете, я бы настоятельно рекомендовал в поддержку вперед путешествия во времени за счет внедрения:

func getSupportedTimeTravelDirectionsForComplication(complication: CLKComplication, withHandler handler: (CLKComplicationTimeTravelDirections) -> Void) { 
    handler([.Forward]) 
} 

И

func getTimelineEndDateForComplication(complication: CLKComplication, withHandler handler: (NSDate?) -> Void) { 
    let date: NSDate = // Your date 
    handler(date) 
} 
+0

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

+0

Ну, отложив в сторону, что ваш прецедент не поддерживает движение вперед во времени, попробовали ли вы реализовать метод, который я предложил сначала «getCurrentTimelineEntryForComplication»? – blackp

+0

В исходном вопросе я сказал, что я не занимаюсь путешествиями во времени, и что я уже пытался реализовать getCurrentTimelineEntryForComplication, getNextRequestedUpdateDateWithHandler и запросилUpdateDidBegin –