这是我在开始试验WatchKit和并发症时面临的一个简单问题。
我创建了一个简单的应用程序,它显示了公共字符串“Y”的复杂功能,通过单击它,Apple Watch应用程序显示了一个简单的开关。
我在ComplicationController.swift中的getPlaceholderTemplateForComplication
中编写了代码,并在InterfaceController.swift中添加了一个开关IBAction
。
通过改变开关的值,公共字符串在“N”和“Y”之间循环。我也想在复杂化中改变它。但是我注意到并发症始终保持在“Y”状态。
我发现了一个关于强制复制更新的类似问题,但它与TimeLine并发症功能有关,而不是placeHolder。
func updateComplication() {
let complicationServer = CLKComplicationServer.sharedInstance()
for complication in complicationServer.activeComplications {
complicationServer.reloadTimelineForComplication(complication)
}
}
在我的案例中,我不清楚在何处以及如何使用它。
正如我所建议的那样,我参与了getCurrentTimelineEntryForComplication。
为了仅测试ModularComplication,我使用了:
switch complication.family {
case .ModularSmall:
let modularSmallTemplate =
CLKComplicationTemplateModularSmallRingText()
modularSmallTemplate.textProvider =
CLKSimpleTextProvider(text: stringa)
modularSmallTemplate.fillFraction = 0.95
modularSmallTemplate.ringStyle = CLKComplicationRingStyle.Closed
let template = CLKComplicationTimelineEntry(
date: NSDate(), complicationTemplate: modularSmallTemplate)
handler(template)
default:
handler(nil)
}
我在InterfaceController.swift中有IBAction开关。
我在使用中遇到问题:
func updateComplication() {
let complicationServer = CLKComplicationServer.sharedInstance()
for complication in complicationServer.activeComplications {
complicationServer.reloadTimelineForComplication(complication)
}
}
为了能够从IBAction中调用它,我必须在哪里写上面提到的函数?
如果我在ComplicationController.swift中编写它,可以通过InterfaceController.swift中的IBAction调用它:
ComplicationController.updateComplication()
我收到错误“呼叫中缺少参数#1的参数”,
虽然如果我在InterfaceController中编写并在IBAction中调用它,虽然构建成功,但在运行App并更改开关的值时,我收到以下错误:“致命错误:在展开时意外发现nil可选值“在线:
for complication in complicationServer.activeComplications
的func updateComplication。
答案 0 :(得分:4)
这不是您要更新的占位符文本。占位符模板是一个静态模板,在您自定义表盘时,该模板会显示在复杂功能的选择屏幕中。它只被称为一次以获取占位符文本,并且在重新加载时间轴时不会被调用。
并发症的当前(实际,实时)时间表条目由getCurrentTimelineEntryForComplication
提供。在此功能中,您应该使用模型的on
状态来为主动并发症家族创建包含“N”或“Y”的CLKTextProvider
。
最后,您应该从开关updateComplication()
拨打IBAction
以重新加载并发症时间线,这将更新当前条目以显示表盘上的开关的新状态。
由于您的并发症是手动更新的,因此您应该在getNextRequestedUpdateDateWithHandler
中返回nil updateDate ,以避免安排您的并发症进行任何定期更新。
更新已修改的问题:
您应该在接口控制器中包含updateComplication
函数,因为您的并发控制器并不是要由您实例化。
关于“在展开可选值时意外发现nil”错误,这是an issue that has been mentioned on the Apple Developer Forums。
如果您已经在运行watchOS 2.1,则可以try the latest watchOS beta查看问题是否已针对2.2进行修复。您还应该file a bug report并使用雷达22947535。