哪些属性应该与 NSUserActivity 上的 CSSearchableItemAttributeSet 一起使用?

Which properties should be used with CSSearchableItemAttributeSet on NSUserActivity?

我在我的网站上添加了 Web 标记,因此当用户在 iOS 中搜索时,项目将出现在 Spotlight 搜索结果中 9. 用户可以在应用程序中浏览相同的项目,因此我想创建 NSUserActivity 在用户浏览项目时 link 反对 Web 内容。

现在,NSUserActivity 有一个 contentAttributeSet 属性,我将用它来将缩略图附加到 activity。 CSSearchableItemAttributeSet 有一些 NSUserActivity 也有的属性,所以我不确定我应该实现哪一个,或者我是否应该为两者指定相同的数据。我是为 NSUserActivity 设置 title 还是为 CSSearchableItemAttributeSet 设置 title,还是只设置一个或另一个?与 keywords 相同,两者都是 属性。

NSUserActivity *activity = [[NSUserActivity alloc] initWithActivityType:@“com.domain.appname-something"];
activity.title = @“My Title";
activity.keywords = [NSSet setWithArray:@[@“one", @“two", @“three"]];
activity.userInfo = @{@“id": @“12345"};
activity.requiredUserInfoKeys = [NSSet setWithArray:@[@“id"]];
activity.eligibleForSearch = YES;
activity.eligibleForPublicIndexing = YES;
activity.webpageURL = [NSURL URLWithString:@"https://someurl.com"];

//QUESTION: Do I need to duplicate title and keywords here:
CSSearchableItemAttributeSet *contentAttributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeImage];
contentAttributeSet.title = activity.title;
contentAttributeSet.displayName = activity.title;
contentAttributeSet.keywords = [activity.keywords allObjects];
contentAttributeSet.contentDescription = @“My Description Here";
contentAttributeSet.thumbnailData = [self generateImage];

activity.contentAttributeSet = contentAttributeSet;

如果指定了 NSUserActivity 和 CSSearchableItemAttributeSet 的 title 属性,则

  1. 可以通过两个标题搜索项目。
  2. 搜索结果将具有在 NSUserActivity 实例中指定的标题。

如果指定了 NSUserActivity 和 CSSearchableItemAttributeSet 的 关键字 属性,则可以使用 CSSearchableItemAttributeSet 实例中指定的关键字而不是 CSSearchableItemAttributeSet 中指定的关键字搜索项目NSUserActivity 实例。

为 NSUserActivity 或 CSSearchableItemAttributeSet 设置属性时没有冲突。

因此,当将 CSSearchableItemAttributeSet 与 NSUserActivity 一起使用时,我们可以跳过设置 NSUserActivity 通用的 CSSearchableItemAttributeSet 属性 class。

在与 DTS 讨论这个话题后,这是他们的结论:

With regards properties, like keywords, that can be set on both the NSUserActivity and the NSUserActivity’s embedded CSSearchableItemAttributeSet, the advice from Core Spotlight engineering is that you set them just on the CSSearchableItemAttributeSet.

[title and displayName] are more-or-less the same, with the soft implication that, if the item has a really long title, that'd go in the title property and the abbreviated title would go in the displayName property.