これは、WatchKit と複雑化の実験を開始しているときに直面している簡単な問題です。
パブリック文字列「Y」でコンプリケーションを表示するシンプルなアプリを作成し、それをクリックすると、シンプルなスイッチで Apple Watch アプリが表示されます。ComplicationController.swiftにコードを書き、InterfaceController.swiftgetPlaceholderTemplateForComplication
にスイッチを追加しました。IBAction
スイッチの値を変更すると、パブリック文字列は「N」と「Y」の間で循環します。コンプリケーションも変えてほしいです。しかし、コンプリケーションが最初は「Y」のままであることに気付きました。
複雑な更新の強制に関する同様の質問を見つけましたが、それはプレースホルダーではなく TimeLine 複雑な関数に関連していました。
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 に記述した場合、InterfaceController.swift の IBAction から次のように呼び出します。
ComplicationController.updateComplication()
「呼び出しでパラメーター #1 の引数がありません」というエラーが表示されます。
それを InterfaceController に記述して IBAction で呼び出すと、ビルドは成功しますが、アプリを実行してスイッチの値を変更すると、「致命的なエラー: オプション値のラップ解除中に予期せず nil が見つかりました」というエラーが表示されます。行で:
for complication in complicationServer.activeComplications
関数 updateComplication の。