强制更新Apple Watch上的占位符复杂功能

时间:2016-02-24 17:37:51

标签: swift watchkit watch-os-2 apple-watch-complication

这是我在开始试验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。

1 个答案:

答案 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。