requestedUpdateDidBegin只调用一次

时间:2015-12-07 21:38:17

标签: ios swift background-process watch-os-2 apple-watch-complication

我认为以下代码每5分钟会请求一次新数据,但模拟器上没有更新。

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

我需要一些项目设置吗?

我已经使用Xcode 7.1.1和7.2 Beta 4

进行了测试

1 个答案:

答案 0 :(得分:3)

发生时您必须handle the scheduled update,否则ClockKit将停止要求新的时间轴条目:

  

在getNextRequestedUpdateDateWithHandler:方法返回的日期之后的某个时刻,ClockKit会启动并发症的预定更新。 预定更新不会自动延长您的时间表。相反,它们让您有机会让ClockKit知道您是否有数据添加到您的时间线。

     

在计划更新开始时,ClockKit会调用requestedUpdateDidBegin或requestedUpdateBudgetExhausted方法,具体取决于并发症的时间预算的状态。如果要将数据添加到时间线,则必须实现其中一个或两个方法。您对这些方法的实现应根据需要扩展或重新加载并发症的时间线。当您这样做时,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建议开发人员:

  

指定您可以管理的日期。不要让系统在几分钟内更新您的并发症。相反,提供持续数小时或一整天的数据。如果您的预算用尽,则在您的预算补充完毕之后才会进行下一次预定更新。