3

我有一个非常简单的随机数并发症。但是我的号码不会更新。每次看手表都是一样的。只有当我重新安装复杂功能(重新安装苹果手表应用程序)时,我才会得到一个新号码。

我已将更新设置为 1 秒。有人知道可能出了什么问题吗?

func getCurrentTimelineEntryForComplication(complication: CLKComplication, withHandler handler: ((CLKComplicationTimelineEntry?) -> Void)) {
    handler(CLKComplicationTimelineEntry(date: NSDate(), complicationTemplate: getTemplateForComplication(family: complication.family)!))
}

func getNextRequestedUpdateDateWithHandler(handler: (NSDate?) -> Void) {
    handler(NSDate(timeIntervalSinceNow: 1))
}

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

func getTemplateForComplication(family family: CLKComplicationFamily) -> CLKComplicationTemplate? {
    let bitcoinPrice = Double(arc4random_uniform(400))
    switch family {
    case .ModularSmall:
        let template = CLKComplicationTemplateModularSmallSimpleText()
        template.textProvider = CLKSimpleTextProvider(text: String(format: "%.2f", bitcoinPrice))
        return template
    case .ModularLarge:
        let template = CLKComplicationTemplateModularLargeTallBody()
        template.headerTextProvider = CLKSimpleTextProvider(text: "Bitcoin")
        template.bodyTextProvider = CLKSimpleTextProvider(text: String(format: "%.2f €", bitcoinPrice))
        return template
    case .UtilitarianSmall:
        let template = CLKComplicationTemplateUtilitarianSmallFlat()
        template.textProvider = CLKSimpleTextProvider(text: String(format: "%.2f", bitcoinPrice))
        return template
    case .UtilitarianLarge:
        let template = CLKComplicationTemplateUtilitarianLargeFlat()
        template.textProvider = CLKSimpleTextProvider(text: String(format: " %.2f €", bitcoinPrice))
        return template
    default:
        return nil
    }
}
4

1 回答 1

3

您的数据源缺少负责处理计划更新的方法

在计划更新开始时,ClockKit 会调用requestedUpdateDidBeginorrequestedUpdateBudgetExhausted方法,具体取决于您的并发症的时间预算状态。如果要将数据添加到时间线,则必须实现其中一种或两种方法。您对这些方法的实现应根据需要扩展或重新加载您的并发症的时间线。当您这样做时,ClockKit 会从您的数据源请求新的时间线条目。如果您不扩展或重新加载您的时间线,ClockKit 不会要求任何新的时间线条目。

以下是您在预定更新发生后重新加载时间线的方法:

// MARK: - Responding to Scheduled Updates

func requestedUpdateDidBegin() {
    let server=CLKComplicationServer.sharedInstance()
    for complication in server.activeComplications {
        server.reloadTimelineForComplication(complication)
    }
}

您还应该实施requestedUpdateBudgetExhausted().

请记住,计划更新只能每 10 分钟发生一次;不可能每秒更新您的并发症。还要考虑更新过于频繁可能会耗尽您的更新预算:

尽可能指定未来的日期。不要要求系统在几分钟内更新您的并发症。相反,提供持续数小时或一整天的数据。如果您的预算用尽,则在您的预算得到补充后才会进行下一次计划更新。

于 2015-12-12T01:11:07.060 回答