0

Meine Komplikation und Zeitreise funktionierte perfekt, als ich nur .ModularLarge hatte.Zeitleisteneinträge für mehrere Komplikationsfamilien

Ich wollte .ModularSmall als eine Option hinzufügen, also habe ich versucht, meinen Code ein paar verschiedene Möglichkeiten zu ändern, aber es funktioniert nicht mehr wie erwartet.

Was jetzt passiert, ist, dass Zeitreise für den ersten Eintrag im Array von getTimelineEntriesForComplication funktioniert, aber die nächsten Einträge erscheinen nie bei der Zeitreise, so dass die Komplikation nur auf dem ersten Eintrag bleibt.

Timelineversucht, mit if Anweisung:

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) 
     } 
    } 
} 

Antwort

1

Was passiert ist, Zeit-Reise in der Anordnung für den ersten Eintrag arbeiten von getTimelineEntriesForComplication produziert, aber die nächsten Einträge erscheinen nie, wann Zeit zu tun Reisen, so bleibt die Komplikation einfach beim ersten Eintrag.

Es gibt einen Fehler in Ihrem getTimelineEntriesForComplication Code. Sie haben ein Array mit nur einem Eintrag zurückgegeben, da Sie innerhalb der for-Schleife zurückgegeben:

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

Umstrukturieren der Code wie folgt aussehen:

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

-Code funktioniert, aber nur Ihre Meinung fragen, auf Wenn 'if' Statement oder' Case Switch' ist besser in den Methoden zu verwenden. Und wenn du 'if' wählen würdest, würdest du nur' if' verwenden oder würdest du 'if else' verwenden? – victorpulak

+1

Persönlich denke ich, dass die switch-Anweisung einfacher zu lesen und zu warten ist und mehr Code-Sicherheit eingebaut hat. Mit 'else if'-Blöcken könnten weitere Fehler auftreten. –