WatchOS5 - как мгновенно освежить мои осложнения? - PullRequest
0 голосов
/ 18 ноября 2018

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

Кажется, я не могу заставить поведение типа «нажать кнопку -> увидеть обновление на сложность».

Что такоеподходящий метод для принудительного обновления усложнения? Как я могу мгновенно обновить услугу «Яблочные часы»?

Я вижу изменения в названии, но я думаю, что мне нужно нажать на усложнение, чтобы открыть его часы Apple.приложение первым.Как я могу получить услугу, чтобы обновить себя на домашнем экране Watch?

func getCurrentTimelineEntry(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void) {

if complication.family == .graphicRectangular {
  let template = CLKComplicationTemplateGraphicRectangularLargeImage() 
//...configure
  return template
  }
}

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

func refreshComplication() {
      #if os(watchOS)
    let server = CLKComplicationServer.sharedInstance()
    if let complications = server.activeComplications {
        for complication in complications {
            // Call this method sparingly. If your existing complication data is still valid,
            // consider calling the extendTimeline(for:) method instead.
            server.reloadTimeline(for: complication)
        }
    }
    #endif
}

1 Ответ

0 голосов
/ 07 декабря 2018

Вы можете сделать это, вызвав функцию refreshComplication() из вашего блока didReceiveApplicationContext в файле, в котором есть WCSessionDelegate .

Так что, если вы получаете заголовок через сообщение applicationContext, ваш код будет выглядеть примерно так:

func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) {

    if let updatedTitle = applicationContext["updatedTitle"] {
        if let title = updateTitle as? String {
            //Remeber that complicationServer.swift is a seperate process therefore you will need to store the received data somehow.
            UserDefaults.standard.set(title, forKey: "complicationTitle")
            refreshComplication()
        }
    }
}

У меня есть настройка в моем приложении для iOS, которая позволяет пользователю изменять свою цель, и с помощью этого метода почти мгновенно обновляется сложность с новой целью. Тем не менее, я полагаю, что после того, как ваше осложнение израсходует свой бюджет процессора, ничего не произойдет, но, надеюсь, этого не произойдет для вас. Смотри https://developer.apple.com/documentation/clockkit/clkcomplicationserver/1627891-reloadtimeline

Надеюсь, это поможет, дайте мне знать, как вы поживаете. Drew

...