【问题标题】:WatchOS 2 Complication Scheduled Update In BackgroundWatchOS 2 复杂计划在后台更新
【发布时间】:2015-09-29 14:49:22
【问题描述】:

所以,经过这么多的测试和在线研究,我不得不放弃并寻求帮助。 WatchOS 2 并发症。

所以我正在尝试创建一个显示更新时间的基本复杂功能。

我知道后台更新是有预算的,所以我尝试每 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 方法,但没有别的。

有什么建议或我明显遗漏的任何东西吗?非常感谢阅读。

【问题讨论】:

  • 我也有同样的问题。我尝试使用 NSTimer 作为替代方案,但它只会导致内存读取错误。

标签: ios objective-c swift watchos-2 apple-watch-complication


【解决方案1】:

我认为你需要实现:

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)
}

【讨论】:

  • 不幸的是,这对我没有帮助,因为我想收集的数据仅在当前更新时可用,并且在过去可用。没有未来的数据可用。计划使用 Health Kit 收集计步器数据
  • 好吧,撇开您的用例不支持前向时间旅行不谈,您是否尝试过实现我首先建议的方法getCurrentTimelineEntryForComplication
  • 在最初的问题中,我说过我没有进行时间旅行,并且我已经尝试过实现 getCurrentTimelineEntryForComplication、getNextRequestedUpdateDateWithHandler 和 requestedUpdateDidBegin
  • 我一定是误会了。我在您的问题中没有看到对getCurrentTimelineEntryForComplication 的任何引用。并发症对我来说是有效的,但没有看到你的来源,我不知道还有什么建议。
  • 对不起,你是对的,我在问题中犯了一个错误,已经更正了。您多久发现一次可以调用更新?从我读过的内容来看,即使更新是即时的,30 分钟也是最大值
猜你喜欢
  • 2015-12-02
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 2017-11-22
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
相关资源
最近更新 更多