我有一个小部件,它接受两个用户定义的参数:位置和背景。
位置选择器工作得很好,默认为我的LocationQuery
defaultResult
指定的值。但是由于某种原因,后台选择器忽略了我的BackgroundQuery
defaultResult
,XCode抛出了以下警告:
从LNAction获取AppIntent时出错:AppIntent缺少“background”的参数值。您可能需要在@Parameter的初始化器中设置默认值,或者在Query上使用默认方法。
时间轴中没有AppIntent(for:with:)
为什么它不像位置选择器那样工作?
struct BackgroundQuery: EntityQuery {
func entities(for identifiers: [String]) -> [WidgetBackground] {
[
WidgetBackground(id: "Background1"),
WidgetBackground(id: "Background2")
].filter { identifiers.contains($0.id) }
}
func suggestedEntities() -> [WidgetBackground] {
[
WidgetBackground(id: "Background1"),
WidgetBackground(id: "Background2")
]
}
func defaultResult() -> WidgetBackground {
return WidgetBackground(id: "Background1")
}
}
struct WidgetBackground: AppEntity {
var id: String
static var typeDisplayRepresentation: TypeDisplayRepresentation = "Background"
static var defaultQuery = BackgroundQuery()
var displayRepresentation: DisplayRepresentation {
DisplayRepresentation(title: "\(NSLocalizedString(id, comment: "").description)")
}
init(id: String) {
self.id = id
}
}
struct LocationQuery: EntityQuery {
func entities(for identifiers: [LocationDetail.ID]) async throws -> [LocationDetail] {
LocationDetail.getAllLocations().filter { identifiers.contains($0.id) }
}
func suggestedEntities() async throws -> [LocationDetail] {
LocationDetail.getAllLocations()
}
func defaultResult() async -> LocationDetail? {
try? await suggestedEntities().first
}
}
struct SelectLocationIntent: WidgetConfigurationIntent {
static var title: LocalizedStringResource = "Avalanche Reports Location"
static var description = IntentDescription("Select the location of the displayed avalanche reports.")
@Parameter(title: "Location")
var locationDetail: LocationDetail
@Parameter(title: "Background")
var background: WidgetBackground
}
2条答案
按热度按时间6ojccjat1#
我不知道你是怎么写LocationQuery的,所以我不知道为什么这会发生在BackgroundQuery而不是LocationQuery上。但是你可以添加类似这样的东西来确保参数默认为你想要的值:
如果这解决了你的问题,请告诉我。也许还可以共享LocationQuery。
pw9qyyiw2#
回答我自己的问题,因为我终于找到了一个解决方案,它看起来像
defaultResult
只有当它的返回值是suggestedEntities().first
时才能工作,老实说,我不知道为什么它会这样工作,所以我希望有一个更好的答案,它解释了,我会标记为正确。