2

这就是我注册我的 UserActivity 的方式。

我得到了捷径并且功能有效。

但是,我将应用程序图标作为缩略图而不是我设置的那个,

func registerUserActivity(component: Component)
{
    userActivity = NSUserActivity.init(activityType: "com.company.app.openComponent")

    if #available(iOS 12.0, *) {
        userActivity.isEligibleForPrediction = true
        userActivity.isEligibleForSearch = true
        userActivity.suggestedInvocationPhrase = "Open \(component.componentName ?? "recent Component")"
    }

    userActivity.title = "Open \(component.componentName ?? "recent component")"
    userActivity.userInfo = ["componentName" : component.componentName]

     let attributes = CSSearchableItemAttributeSet.init(itemContentType: kUTTypeItem as String)

    let image =   UIImage(named: "cloud_car")!
    attributes.thumbnailData = UIImagePNGRepresentation(image)

    attributes.contentDescription = "Opens \(component.componentName ?? "recent Component") "
    userActivity.contentAttributeSet = attributes
    userActivity.becomeCurrent()

}

我做错什么了吗?

4

2 回答 2

0

在快捷方式或 Siri 建议中显示an 时NSUserActivity,它始终使用应用程序图标。目前没有办法改变这种行为。

属性集中的缩略图仅在 Spotlight 搜索结果中显示项目时使用。因此,如果某个活动出现在搜索结果中,我发现它将使用那里的缩略图。

这种行为没有得到很好的记录。很容易阅读CoreSpotlight文档并认为缩略图对于NSUserActivity.

于 2021-12-19T16:25:37.957 回答
0

据我所知,有两个可能的问题导致了这种情况。首先是你的逻辑应该是:attributes.thumbnailData = image.pngData(). 如果不是这样,则缓存特定 的缩略图是个问题,并且自iOS NSUserActivity9 以来一直存在。该CoreSpotlight框架似乎将图标数据与' 不允许您更新图标图像,即使您之前没有提供图标图像。您可以做的最好的事情是在内部跟踪所有持久标识符,删除旧标识符,并创建一个全新的 NSUserActivity ,用户也必须将其视为新的快捷方式。activityTypeNSUserActivityNSUserActivity

这绝对是一个愚蠢的问题,我希望在 iOS 9 发布后的 3.5 年里,Apple 会引入一种更新NSUserActivity缩略图的方法,但我找不到任何证据证明是这种情况. 对不起,我可以给你一个更好的答案。

于 2019-02-28T03:44:16.913 回答