0

私の合併症とタイムトラベルは、私が持っていたときに完全に機能しました.ModularLarge.

オプションとして追加したかった.ModularSmallので、コードをいくつかの異なる方法で変更しようとしましたが、期待どおりに機能しなくなりました。

現在何が起こっているかというと、Time Travel は から生成された配列の最初のエントリに対して機能しgetTimelineEntriesForComplicationますが、Time Travel を実行すると次のエントリが表示されないため、合併症は最初のエントリにとどまります。

ステートメントを使用してみたifタイムライン:

func getTimelineEntriesForComplication(complication: CLKComplication, afterDate date: NSDate, limit: Int, withHandler handler: (([CLKComplicationTimelineEntry]?) -> Void)) {

    guard let headers = headerArray, texts = body1Array, dates = body2Array else { return }

    var entries = [CLKComplicationTimelineEntry]()
    for (index, header) in headers.enumerate() {
        let text = texts[index]
        let date1 = dates[index]
        let headerTextProvider = CLKSimpleTextProvider(text: header as! String)
        let body1TextProvider = CLKSimpleTextProvider(text: text as! String)
        let timeTextProvider = CLKTimeTextProvider(date: date1 as! NSDate)
        let template = CLKComplicationTemplateModularLargeStandardBody()
        let template2 = CLKComplicationTemplateModularSmallStackText()
        template.headerTextProvider = headerTextProvider
        template.body1TextProvider = body1TextProvider
        template2.line1TextProvider = headerTextProvider
        template2.line2TextProvider = body1TextProvider
        template.body2TextProvider = timeTextProvider

        if complication.family == .ModularLarge {
            let timelineEntry = CLKComplicationTimelineEntry(date: date1 as! NSDate, complicationTemplate: template)
            entries.append(timelineEntry)
            handler(entries)
        }
        if complication.family == .ModularSmall {
            let timelineEntry = CLKComplicationTimelineEntry(date: date1 as! NSDate, complicationTemplate: template2)
            entries.append(timelineEntry)
            handler(entries)
        }
        else {
            handler(nil)
        }
    }
}
4

1 に答える 1

1

何が起きているかというと、Time Travel は getTimelineEntriesForComplication から生成された配列の最初のエントリに対して機能しますが、Time Travel を実行すると次のエントリが表示されないため、Complication は最初のエントリにとどまります。

コードにバグがありますgetTimelineEntriesForComplication。for ループで返されたため、エントリが 1 つだけの配列が返されました。

for (index, header) in headers.enumerate() {
    if complication.family == .ModularLarge {
        let timelineEntry = CLKComplicationTimelineEntry(date: date1 as! NSDate, complicationTemplate: template)
        entries.append(timelineEntry)
        handler(entries)
    }
}

コードを次のように再構成します。

for (index, header) in headers.enumerate() {
    if complication.family == .ModularLarge {
        let timelineEntry = CLKComplicationTimelineEntry(date: date1 as! NSDate, complicationTemplate: template)
        entries.append(timelineEntry)
    }
}
handler(entries)
于 2016-03-25T20:46:50.250 に答える