Qual é o fluxo para atualizar dados de complicações para o Apple Watch?

Eu tenho acompanhado muitos tutoriais na internet para aprender a configurar a complicação. Não tenho nenhum problema em configurar a complicação conforme o esperado.

Até as entradas iniciais da linha do tempo expirarem. Após 12 horas, não sei como atualizá-lo para manter a complicação ativa. Vou compartilhar tudo o que tenho abaixo e espero que alguém possa me ajudar.

Aqui, crio as variáveis para os meus dados que quero exibir na complicação.

struct data = {
var name: String
var startString: String
var startDate: NSDate
}

A matriz a seguir é um contêiner para esses dados.

var dataArray = [data]

Isso permite que a complicação seja mostrada quando o relógio está bloqueado.

func getPrivacyBehaviorForComplication(complication: CLKComplication, withHandler handler: (CLKComplicationPrivacyBehavior) -> Void) {
    handler(.ShowOnLockScreen)
}

Isso permite avançar no tempo na complicação.

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

Aqui, defino o horário de início da linha do tempo como igual a agora.

func getTimelineStartDateForComplication(complication: CLKComplication, withHandler handler: (NSDate?) -> Void) {
    handler(NSDate())
}

Aqui, defino o horário final da linha do tempo como igual a 12 horas a partir de agora.

func getTimelineEndDateForComplication(complication: CLKComplication, withHandler handler: (NSDate?) -> Void) {
    handler(NSDate(timeIntervalSinceNow: (60 * 60 * 12)))
}

Aqui, eu crio o modelo da complicação. Isso é para mostrar dados de amostra para os usuários quando eles veem minha complicação enquanto navegam em todas as complicações no relógio.

func getPlaceholderTemplateForComplication(complication: CLKComplication, withHandler handler: (CLKComplicationTemplate?) -> Void) {

    let headerTextProvider = CLKSimpleTextProvider(text: "Some Data")
    let body1TextProvider = CLKSimpleTextProvider(text: "Some Data Time")
    let template = CLKComplicationTemplateModularLargeStandardBody()
    template.headerTextProvider = headerTextProvider
    template.body1TextProvider = body1TextProvider

    handler(template)
}

Isso cria a primeira entrada na linha do tempo da complicação. Assim que a complicação for ativada, esse código será executado e preencherá a complicação imediatamente de acordo.

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

    createData()

    if complication.family == .ModularLarge {

        if dataArray.count != 0 {

            let firstData = dataArray[0]
            let headerTextProvider = CLKSimpleTextProvider(text: firstData.name)
            let body1TextProvider = CLKSimpleTextProvider(text: firstData.startString)
            let template = CLKComplicationTemplateModularLargeStandardBody()
            template.headerTextProvider = headerTextProvider
            template.body1TextProvider = body1TextProvider
            let timelineEntry = CLKComplicationTimelineEntry(date: NSDate(), complicationTemplate: template)
            handler(timelineEntry)
        } else {
            let headerTextProvider = CLKSimpleTextProvider(text: "No Data")
            let body1TextProvider = CLKSimpleTextProvider(text: "Create some data")
            let template = CLKComplicationTemplateModularLargeStandardBody()
            template.headerTextProvider = headerTextProvider
            template.body1TextProvider = body1TextProvider

            let timelineEntry = CLKComplicationTimelineEntry(date: NSDate(), complicationTemplate: template)
            handler(timelineEntry)
        }

    } else {
        handler(nil)
    }

}

É aqui que eu crio entradas da linha do tempo para todos os dados que tenho atualmente.

func getTimelineEntriesForComplication(complication: CLKComplication, afterDate date: NSDate, limit: Int, withHandler handler: ([CLKComplicationTimelineEntry]?) -> Void) {

    createData()

    var entries = [CLKComplicationTimelineEntry]()

    for dataObject in dataArray {

        if entries.count < limit && data.startDate.timeIntervalSinceDate(date) > 0 {

            let headerTextProvider = CLKSimpleTextProvider(text: dataObject.name)
            let body1TextProvider = CLKSimpleTextProvider(text: dataObject.startString)
            let template = CLKComplicationTemplateModularLargeStandardBody()
            template.headerTextProvider = headerTextProvider
            template.body1TextProvider = body1TextProvider
            let timelineEntry = CLKComplicationTimelineEntry(date: NSDate(timeInterval: (-10*60), sinceDate: data.startDate), complicationTemplate: template)
            entries.append(timelineEntry)

        }

    }

    handler(entries)

}

Isso informa ao relógio quando atualizar os dados da complicação.

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

É aqui que estou tendo problemas.

Como crio meus novos dados e recarrego a linha do tempo? Qual é o fluxo? Não estou tentando estender a linha do tempo, mas substituí-la completamente. Estou completamente perdido.Documentos da Apple são bastante vagas quando se trata deste ponto. Eu sei que preciso implementar os seguintes métodos, mas não sei como. Alguém pode me ajudar a preencher esse código?

func requestedUpdateDidBegin() {
    createData() //I assume createData() goes here? If so, how do I populate the new timeline entries based on the results?
}

func requestedUpdateBudgetExhausted() {
    //This can't possibly be the case as I haven't gotten it to work once.
}

func reloadTimelineForComplication(complication: CLKComplication!) {
      //This method appears to do nothing.
}

Atualizar:

Graças a El Tea, eu consegui. Preciso adicionar uma instância do CLKComplicationServer ao requestUpdateDidBegin e colocar o método reloadTimeline dentro.

Aqui está o código atualizado:

func requestedUpdateDidBegin() {
    print("Complication update is starting")

    createData()

    let server=CLKComplicationServer.sharedInstance()

    for comp in (server.activeComplications) {
        server.reloadTimelineForComplication(comp)
        print("Timeline has been reloaded!")
    }

}

func requestedUpdateBudgetExhausted() {
    print("Budget exhausted")
}

questionAnswers(2)

yourAnswerToTheQuestion