为啥我的 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 条码不可见
将 GraphicCircular Apple Watch 复杂功能添加到现有 Xcode 项目