为啥我的 Apple Watch 复杂功能不显示任何内容?

Posted

技术标签:

【中文标题】为啥我的 Apple Watch 复杂功能不显示任何内容?【英文标题】:Why doesn't my Apple Watch complication show anything?为什么我的 Apple Watch 复杂功能不显示任何内容? 【发布时间】:2019-04-23 07:34:37 【问题描述】:

我使用 Xcode 的“ios App with Watchkit App”模板创建了一个应用程序,进入TARGETS 并检查了Complications Configuration > Supported Families > Graphic Corner。我在 Extension 中打开了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】:

这是我目前正在运行的一些代码:

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 只是我添加到我的一些模型中的一个属性,这样我就可以通过调用 graphicsCornerComplication 来快速获取时间线条目。在使用中,它看起来像这样:

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

【讨论】:

我确实实现了getLocalizableSampleTemplate。滚动浏览插槽或选择时没有任何区别,所以我最初没有提到它。它现在已添加到问题中。数据源类设置为$(PRODUCT_MODULE_NAME).ComplicationController,这是默认值。我正在模拟器和真实设备中使用当前版本的 Xcode (10.2.1)、WatchOS (5.2) 和 iOS (12.2)。 您的工作代码在功能上与我的相同,只是您定义的是 var graphicCornerComplication 而不是 CLKComplicationDataSource 中的函数之一。我在文档中没有看到...是我需要定义的吗?它在哪里被调用? graphicCornerComplication 只是我添加到我的一些模型中的一个属性,以便我可以将相关信息显示为一个并发症。我已经更新了答案以澄清这一点。 如果您的代码看起来不错,那么它看起来像是在发生其他事情。你有针对并发症的有效方案吗? 我想我有一个积极的计划。很抱歉很密集,但我不太确定这意味着什么。当我编辑默认方案时,它显示“Watchkit Extension”作为构建目标之一。还有比这更多的吗?

以上是关于为啥我的 Apple Watch 复杂功能不显示任何内容?的主要内容,如果未能解决你的问题,请参考以下文章

Apple Wallet 中的 Apple Watch 1D 条码不可见

自定义时复杂功能会冻结 Apple Watch

Apple Watch 复杂功能色调颜色

将 GraphicCircular Apple Watch 复杂功能添加到现有 Xcode 项目

有没有办法在 Apple Watch 的后台每天运行一次代码?

如何监控Apple Watch Face 上的计时器?