3

这是我在开始尝试 WatchKit 和并发症时面临的一个简单问题。

我创建了一个简单的应用程序,它显示了一个带有公共字符串“Y”的复杂功能,单击它,Apple Watch 应用程序就会显示一个简单的开关。getPlaceholderTemplateForComplication我在 ComplicationController.swift中编写了我的代码,并IBAction在 InterfaceController.swift 中添加了一个开关。

通过改变开关的值,公共字符串在“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

func updateComplication。

4

1 回答 1

4

这不是您要更新的占位符文本。占位符模板是在您自定义表盘时显示在复杂功能选择屏幕中的静态模板。它只被调用一次来获取占位符文本,并且在重新加载时间线时不会被调用。

并发症的当前(实际、实时)时间线条目由 提供getCurrentTimelineEntryForComplication。在此函数中,您应该使用模型的on开关状态为活动并发症系列创建CLKTextProvider包含“N”或“Y”的状态。

最后,您应该updateComplication()从您的开关调用IBAction以重新加载您的并发症时间线,这将更新当前条目以在表盘上显示开关的新状态。

由于您的并发症是手动更新的,因此您应该返回 nil updateDategetNextRequestedUpdateDateWithHandler避免为任何定期更新安排您的并发症。

更新您编辑的问题:

您应该updateComplication在界面控制器中包含该功能,因为您的复杂控制器并不打算由您实例化。

关于“Unexpectedly found nil while unwrapping an Optional value”错误,这是苹果开发者论坛上已经提到的问题

如果您已经在运行 watchOS 2.1,您可以尝试最新的 watchOS beta以查看该问题是否已在 2.2 中得到修复。您还应该提交错误报告并欺骗雷达 22947535。

于 2016-02-24T19:12:11.920 回答