【问题标题】: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)
}

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

我做错了什么?

【问题讨论】:

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


    【解决方案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”作为构建目标之一。还有比这更多的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多