Я использую HealthKit
данные в своем виджете. Если телефон заблокирован, получить HealthKit
данные невозможно, только если телефон разблокирован. Однако шкала времени моего виджета будет пытаться обновиться, даже если телефон заблокирован.
Можно ли каким-то образом вернуть пустое завершение, чтобы не трогать текущие данные виджета?
Это мой код:
struct Provider: IntentTimelineProvider {
private let healthKitService = HealthKitService()
func getTimeline(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
let currentDate = Date()
let refreshDate = Calendar.current.date(byAdding: .minute, value: 5, to: currentDate)!
healthKitService.getHeartRate() { data, error in
//Create an empty entry
var entry = SimpleEntry(date: currentDate, configuration: ConfigurationIntent(), data: nil)
//If no errors, set data
if(error == nil) {
entry.data = data
} else {
print(error) //this runs when a locked phone does the widget update
}
//Return response
let timeline = Timeline(entries: [entry], policy: .after(refreshDate))
completion(timeline)
}
}
}
Что я могу сделать, так это сохранить данные входа в UserDefaults
и загрузить их в маршрут ошибки? Я не уверен, что это хорошее решение.