强制更新 Apple Watch 上的占位符复杂功能
Forcing update to placeholder complication on Apple Watch
这是我在开始尝试 WatchKit 和并发症时遇到的一个简单问题。
我创建了一个简单的应用程序,它显示了一个带有 public 字符串“Y”的复杂功能,通过单击它,Apple Watch 应用程序会显示一个简单的开关。
我在 ComplicationController.swift 中的 getPlaceholderTemplateForComplication
中编写了我的代码,并在 InterfaceController.swift 中添加了一个开关 IBAction
。
通过改变开关的值,public 字符串在“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 中调用它,虽然构建成功,但当 运行 应用程序并更改开关的值时,我会收到以下错误:“致命错误:在展开可选值时意外发现 nil”行:
for complication in complicationServer.activeComplications
of func updateComplication。
这不是您要更新的占位符文本。占位符模板是一个静态模板,在您自定义表盘时显示在复杂功能的选择屏幕中。它只被调用 一次 来获取占位符文本,并且在重新加载时间线时不会被调用。
并发症的当前(实际、实时)时间线条目由 getCurrentTimelineEntryForComplication
提供。在这个函数中,您应该使用模型的 on
开关状态来创建一个 CLKTextProvider
,其中包含一个 "N" 或 "Y" 用于活动并发症系列。
最后,您应该从开关 IBAction
调用 updateComplication()
以重新加载您的复杂时间轴,这将更新当前条目以在表盘上显示开关的新状态。
由于您的复杂功能是手动更新的,因此您应该 return 在 getNextRequestedUpdateDateWithHandler
中设置一个零 updateDate 以避免为任何定期更新安排您的复杂功能。
更新您已编辑的问题:
你应该在你的界面控制器中包含 updateComplication
函数,因为你的复杂控制器不应该由你实例化。
关于 "Unexpectedly found nil while unwrapping an Optional value" 错误,这是 an issue that has been mentioned on the Apple Developer Forums。
如果您已经是 运行 watchOS 2.1,您可以 try the latest watchOS beta to see if the issue has been fixed yet for 2.2. You should also file a bug report 并欺骗雷达 22947535。
这是我在开始尝试 WatchKit 和并发症时遇到的一个简单问题。
我创建了一个简单的应用程序,它显示了一个带有 public 字符串“Y”的复杂功能,通过单击它,Apple Watch 应用程序会显示一个简单的开关。
我在 ComplicationController.swift 中的 getPlaceholderTemplateForComplication
中编写了我的代码,并在 InterfaceController.swift 中添加了一个开关 IBAction
。
通过改变开关的值,public 字符串在“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 中调用它,虽然构建成功,但当 运行 应用程序并更改开关的值时,我会收到以下错误:“致命错误:在展开可选值时意外发现 nil”行:
for complication in complicationServer.activeComplications
of func updateComplication。
这不是您要更新的占位符文本。占位符模板是一个静态模板,在您自定义表盘时显示在复杂功能的选择屏幕中。它只被调用 一次 来获取占位符文本,并且在重新加载时间线时不会被调用。
并发症的当前(实际、实时)时间线条目由 getCurrentTimelineEntryForComplication
提供。在这个函数中,您应该使用模型的 on
开关状态来创建一个 CLKTextProvider
,其中包含一个 "N" 或 "Y" 用于活动并发症系列。
最后,您应该从开关 IBAction
调用 updateComplication()
以重新加载您的复杂时间轴,这将更新当前条目以在表盘上显示开关的新状态。
由于您的复杂功能是手动更新的,因此您应该 return 在 getNextRequestedUpdateDateWithHandler
中设置一个零 updateDate 以避免为任何定期更新安排您的复杂功能。
更新您已编辑的问题:
你应该在你的界面控制器中包含 updateComplication
函数,因为你的复杂控制器不应该由你实例化。
关于 "Unexpectedly found nil while unwrapping an Optional value" 错误,这是 an issue that has been mentioned on the Apple Developer Forums。
如果您已经是 运行 watchOS 2.1,您可以 try the latest watchOS beta to see if the issue has been fixed yet for 2.2. You should also file a bug report 并欺骗雷达 22947535。