现在,我的Widget每秒大约发出1个请求。 我想在1小时内将其更改为1个请求。
我在使用@IBOutlet weak var sliderTime: UISlider!
@IBOutlet var labelTime: UILabel!
var timer = Timer()
var dateFormatter = DateFormatter()
override func viewDidLoad()
{
dateFormatter.timeStyle = .short
labelTime.text = dateFormatter.string(from: Date())
timer = Timer.scheduledTimer(timeInterval: 60, target: self, selector: #selector(updateTimeLabel), userInfo: nil, repeats: true);
}
@objc func updateTimeLabel() {
labelTime.text = dateFormatter.string(from: Date())
}
@IBAction func changeTime(_ sender: Any) {
}
时遇到一些错误,例如let timeline = ...
等。
任何建议可能有什么问题
Value of optional type 'Date?' must be unwrapped to a value of type 'Date'
答案 0 :(得分:3)
您不应该依赖TimelineReloadPolicy
-它指定了刷新时间轴的最早时间 ,这不能保证它在该特定时间重新加载。
根据我的观察,小部件更有可能使用atEnd
策略重新加载时间轴。
指定WidgetKit请求新时间轴的策略 时间轴中最后一个日期过去之后。
这是一个可能的解决方案:
func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> Void) {
print("getTimeline")
let entries = [
SimpleEntry(date: Date()),
SimpleEntry(date: Calendar.current.date(byAdding: .minute, value: 1, to: Date())!),
]
let timeline = Timeline( entries: entries, policy: .atEnd)
completion(timeline)
}
请注意,最后一个条目可能会或可能不会使用。如果时间轴在第二个条目的日期之后立即刷新,则不会显示第二个条目。但是,有时可能会延迟加载时间轴-则第二个条目将可见(直到刷新时间轴)。