我认为下面的代码会每 5 分钟请求一次新数据,但模拟器上没有更新。
func getNextRequestedUpdateDateWithHandler(handler: (NSDate?) -> Void) {
print("update")
handler(NSDate(timeIntervalSinceNow: NSTimeInterval(5*60))
}
我需要一些项目设置吗?
我已经使用 Xcode 7.1.1 和 7.2 Beta 4 对其进行了测试
我认为下面的代码会每 5 分钟请求一次新数据,但模拟器上没有更新。
func getNextRequestedUpdateDateWithHandler(handler: (NSDate?) -> Void) {
print("update")
handler(NSDate(timeIntervalSinceNow: NSTimeInterval(5*60))
}
我需要一些项目设置吗?
我已经使用 Xcode 7.1.1 和 7.2 Beta 4 对其进行了测试
您必须在计划更新发生时处理它,否则 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 建议开发者:
尽可能指定未来的日期。不要要求系统在几分钟内更新您的并发症。相反,提供持续数小时或一整天的数据。如果您的预算用尽,则在您的预算得到补充后才会进行下一次计划更新。