微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

提供 Widget 时间线时如何处理错误?

如何解决提供 Widget 时间线时如何处理错误?

我正在构建一个小部件,它将显示从后端获取内容,该内容将提供接下来 7 天每天的数据。因此,我计划创建一个时间表,其中包含每个日期一个条目的数组,并将重新加载策略设置为 atEnd,以便在用完后获取接下来的 7 天。

我想知道如何处理可能发生的错误。例如,如果没有互联网连接,您将无法获取数据来创建时间轴,那么您应该如何处理它并确保它稍后会再次尝试获取

如果您通过 Timeline(entries: [],policy: .atEnd) 调用带有空条目数组和重新加载策略的完成,它什么时候会自动再次尝试获取条目,还是永远不会?这是否会继续显示最后一个可用的小部件条目(快照/占位符,如果没有的话)?

也许应该在小部件中向用户显示一条错误消息。您可以为此创建一个条目。那么剩下的唯一问题是你如何确保它会重试获得一个真正的时间表?也许在未来使用日期 x 分钟数的后日期策略?不过系统速率限制会重新加载,如果后端一直失败,您不希望太频繁地访问后端。

Apple 确实有 sample code,它通过以下方式实现了通过可失败异步请求填充的时间线:

func getTimeline(in context: Context,completion: @escaping (Timeline<leaderboardEntry>) -> Void) {
    CharacterDetail.loadleaderboardData { (characters,error) in
        guard let characters = characters else {
            let timeline = Timeline(entries: [leaderboardEntry(date: Date(),characters: CharacterDetail.availableCharacters)],policy: .atEnd)
            
            completion(timeline)
            
            return
        }
        let timeline = Timeline(entries: [leaderboardEntry(date: Date(),characters: characters)],policy: .atEnd)
        completion(timeline)
    }
}

这里如果加载排行榜数据失败,它会返回一个带有当前日期的条目,并将重新加载策略设置为结束。所以它会立即显示所有可用的字符,然后时间线耗尽,因此系统需要获取更多的时间线条目,但什么时候会发生?这段代码似乎向系统建议它需要不断地获取新的时间线条目(即使在成功状态下),不是吗?这似乎不对。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。