为什么我的Apple Watch并发症没有显示任何内容?

时间:2019-04-23 07:34:38

标签: ios swift watch-os apple-watch-complication watchos-simulator

我使用Xcode的“带有Watchkit App的iOS应用”模板创建了一个应用,进入TARGETS并选中了Complications Configuration > Supported Families > Graphic Corner。我在扩展程序中打开了ComplicationController.swift,并修改了getCurrentTimelineEntry()

func getCurrentTimelineEntry(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void) {
    let cornerTemplate = CLKComplicationTemplateGraphicCornerStackText()
    cornerTemplate.outerTextProvider = CLKSimpleTextProvider(text: "Outer")
    cornerTemplate.innerTextProvider = CLKSimpleTextProvider(text: "Inner")
    let entry = CLKComplicationTimelineEntry(date: Date(), complicationTemplate: cornerTemplate)
    handler(entry)
}

我还修改了getLocalizableSampleTemplate()来提供一个示例,但这也不起作用:

func getLocalizableSampleTemplate(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTemplate?) -> Void) {
    let cornerTemplate = CLKComplicationTemplateGraphicCornerStackText()
    cornerTemplate.outerTextProvider = CLKSimpleTextProvider(text: "Outer")
    cornerTemplate.innerTextProvider = CLKSimpleTextProvider(text: "Inner")
    handler(cornerTemplate)
}

当我在模拟器中或在手机/手表上运行该应用程序并选择并发症作为图形角之一时,我希望看到“外部”和“内部”。相反,它为一个显示我的应用程序名称,为另一个显示“ ---”。

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

这是我目前正在使用的一些代码:

var graphicCornerComplication: CLKComplicationTimelineEntry? {

        guard #available(watchOSApplicationExtension 5.0, *) else {
            return nil
        }

        let innerTextProvider = CLKSimpleTextProvider(text: "Inner")
        let outerTextProvider = CLKSimpleTextProvider(text: "Outer")

        let template = CLKComplicationTemplateGraphicCornerStackText()
        template.outerTextProvider = outerTextProvider
        template.innerTextProvider = innerTextProvider

        let timelineEntry = CLKComplicationTimelineEntry(date: Date(), complicationTemplate: template)
        return timelineEntry

    }

一些注意事项:

  • 您是否实现了getLocalizableSampleTemplate代码?配置并发症时,这应该是您要做的第一件事。当用户滚动浏览并发症槽并看到您的并发症时,您应该准备好要立即显示的内容。如果您不这样做,那可能就是为什么看到破折号而不是您想要的文本的原因。

  • 您的并发症数据源是否正确分配?在Targets > Your WatchKit Extension > Complications Configuration > Data Source Class下,确保已分配ComplicationController。

  • 如果您使用的是较旧版本的WatchOS,则输入的内容可能为零。

编辑-为了明确起见,graphicCornerComplication只是我添加到某些模型中的一个属性,以便我可以通过仅对它们调用graphicCornerComplication来快速获取时间线条目。在使用中,它看起来像这样:

func getCurrentTimelineEntry(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void) {
    switch complication.family {
    case .graphicCorner:
        let graphicCornerComplication = dataModel.graphicCornerComplication
        handler(graphicCornerComplication)
    default:
        handler(nil)
    }
}