在一个小部件里面,有一个按钮,
Button(intent: AnAppIntent()) {
// Button's label.
}
// It seems this modifier does not add any value.
.invalidatableContent()
字符串
连接到AppIntent。
struct AnAppIntent: AppIntent {
static var title: LocalizedStringResource = "An AppIntent"
init() {
// AppIntent required init.
}
func perform() async throws -> some IntentResult {
// Never called when the app is running.
return .result()
}
}
型
该按钮在点击时调用AppIntent的perform()
,因此仅当应用程序完全关闭时更新小部件UI(带或不带修饰符.invalidatableContent()
)*。
如果应用程序在后台处于活动状态,则不会调用perform()
,并且小部件UI永远不会更新。
用户必须显式地关闭应用程序,以使小部件按预期工作。
问题可能出在所用的时间轴上。
struct SimpleEntry: TimelineEntry {
let date: Date
}
struct Provider: TimelineProvider {
func placeholder(in context: Context) -> SimpleEntry {
SimpleEntry(date: Date())
}
func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) {
completion(SimpleEntry(date: Date()))
}
func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
var entries: [SimpleEntry] = []
// Generate a timeline of five entries an hour apart, starting from the current date.
let currentDate = Date()
for hourOffset in 0 ..< 5 {
let entryDate = Calendar.current.date(byAdding: .second, value: hourOffset, to: currentDate)!
entries.append(SimpleEntry(date: entryDate))
}
let timeline = Timeline(entries: entries, policy: .atEnd)
completion(timeline)
}
}
型
但是,如果问题是时间轴,则小部件将无法在应用程序被关闭的情况下工作。
1条答案
按热度按时间5uzkadbs1#
包含Intent的文件需要具有双重目标成员资格:它需要既是widget扩展目标的一部分,也是app目标的一部分。
所以一定要勾选这些复选框。