2016-02-24 35 views
2

這裏有一個簡單的問題,我在開始試驗WatchKit和複雜情況時遇到了一個問題。在Apple Watch上強制更新佔位符併發症

我創建了一個簡單的應用程序,它顯示了一個公共字符串「Y」的複雜性,通過點擊它,Apple Watch應用程序顯示爲一個簡單的開關。 我在ComplicationController.swift的getPlaceholderTemplateForComplication中編寫了代碼,並在InterfaceController.swift中添加了一個開關IBAction

通過改變開關的值,公共字符串在「N」和「Y」之間循環。我想讓它在併發症中也發生變化。不過,我注意到併發症始終保持在「Y」狀態。

我發現了一個關於強制併發症更新的類似問題,但它與TimeLine併發症func而不是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) 
    }   
} 

我在哪裏有寫上述FUNC,爲了能夠從IBAction爲裏面打電話了嗎?

如果我把它寫在ComplicationController.swift,從IBAction爲稱其爲InterfaceController.swift爲:

ComplicationController.updateComplication() 

我得到的錯誤「缺少在調用參數#1說法」,

而如果我在InterfaceController中編寫它並在IBAction中調用它,雖然構建成功,但在運行應用程序並更改開關值時,出現以下錯誤:「致命錯誤:意外地發現零,同時展開可選值「就行了:

for complication in complicationServer.activeComplications 

func updateComplication。

+0

有沒有什麼辦法可以知道complicationServer.activeComplications中的哪些複雜是你的?在用戶的錶盤上刷新全部四個(或者很多)併發症似乎是浪費,其他應用程序的複雜性包括在內。 – Cindeselia

回答

4

這不是您要更新的佔位符文本。佔位符模板是一個靜態模板,在您自定義您的錶盤時,它會顯示在選擇屏幕中用於您的複雜功能。它只被稱爲一次獲取佔位符文本,並且在時間軸重新加載時不會被調用。

併發症的當前(實際,實時)時間表條目由getCurrentTimelineEntryForComplication提供。此功能是您應該使用模型的on狀態來創建包含活動複雜系列的「N」或「Y」的CLKTextProvider的位置。

最後,你應該叫updateComplication()從你的交換機IBAction刷新你的併發症時間表,這將更新當前條目顯示在手錶表面開關的新狀態。

由於您的併發症是手動更新,你應該在getNextRequestedUpdateDateWithHandler返回零updateDate避免你的安排併發症任何定期更新。

更新爲您編輯的問題:

你應該在你的接口控制器的updateComplication功能,爲您的併發症控制器並不意味着由您來實例化。

關於「意外發現零,同時展開可選值」錯誤,這是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和dupe雷達22947535.

+0

由於我使用AppleWatch很多,我不想在其上安裝測試版。然而,Store上有Apps,它們正在做我正在做的事情,所以應該有一個解決方案... – LukasGF

+0

有時候會有bug的解決方法。我*確實*回答您的原始問題(以及您編輯的其他問題)。如果你正在尋找關於'sharedInstance()'返回零的幫助,最好在一個新問題中提出這個問題。謝謝! –