2

我正在尝试在 Watch 应用程序复杂功能中支持 TimeTravel。考虑这段代码。

在我杀死应用程序之前,我无法理解为什么这些委托方法会被重复调用。

我想知道我做错了什么,因为操作系统负责调用这些方法。这是某种 WatchOS 错误吗?

func getTimelineEntries(for complication: CLKComplication, after date: Date, limit: Int, withHandler handler: @escaping ([    CLKComplicationTimelineEntry]?) -> Void) {
    // Call the handler with the timeline entries after to the given date

    let interval = stride(from:0.0, through:60, by: 10.0)

    var entries: [CLKComplicationTimelineEntry]? = nil

    switch complication.family {

    case .circularSmall:
        entries = interval.flatMap({ minutes in
            entryForCircularSmall(date: date.addingTimeInterval(60.0 * minutes) )
        })
        handler(entries)

    case .utilitarianLarge:
        entries = interval.flatMap({ minutes in
            entryForUtilitarianLarge( date: date.addingTimeInterval(60.0 * minutes) )
        })

        handler(entries)

    default:
        handler(nil)
    }

    print("future timelineEntries limit: \(limit), date: \(date), entries: \(entries?.count)")
}

func getTimelineEndDate(for complication: CLKComplication, withHandler handler: @escaping (Date?) -> Void) {
    let date = Date().addingTimeInterval(60.0 * Double(240))
    print("timeline end: \(date)")
    handler(date)
}

控制台日志的一小段摘录:

timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:32:59 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:09 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:09 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000
future timelineEntries limit: 100, date: 2017-02-09 23:33:10 +0000, entries: Optional(7)
timeline end: 2017-02-10 03:33:10 +0000    

在这一点上,我杀死了应用程序......

4

2 回答 2

0

我找到了另一个原因。您为处理程序返回的条目需要跨越至少 25 小时,否则getTimelineEntries将继续调用,直到它获得足够的条目。

func getTimelineEntries(for complication: CLKComplication, after date: Date, limit: Int, withHandler handler: @escaping ([CLKComplicationTimelineEntry]?) -> Void) {
    var entries: [CLKComplicationTimelineEntry] = // .... some code
    handler(entries)
}
于 2021-12-06T05:14:44.300 回答
0

事实证明,代理被调用了太多次,因为我会继续提供同一日期的时间线条目。

我的代码中有一个错误(此处未显示),负责创建 CLKComplicationTimelineEntry 对象。我没有使用委托提供的日期,而是使用了对 Date() 的调用(显然是从getCurrentTimelineEntry方法的实现中复制粘贴的)。

然而,令我印象深刻的是,WatchOS 会调用委托数千次。

于 2017-02-10T00:42:17.183 回答