在NSUserActivity上CSSearchableIttributeSet应该使用哪些属性?

时间:2015-12-24 21:27:39

标签: ios corespotlight ios-searchapi nsuseractivity

我在我的网站上添加了Web Markup,因此当用户在iOS 9中搜索时,项目将显示在Spotlight搜索结果中。用户可以浏览应用程序中的相同项目,因此我想创建链接到该应用程序的NSUserActivity个对象用户浏览项目时的网页内容。

现在,NSUserActivity具有contentAttributeSet属性,我将使用该属性将缩略图照片附加到活动中。 CSSearchableItemAttributeSet有一些NSUserActivity也有的属性,所以我不确定应该实现哪一个,或者我应该为两者指定相同的数据。我是否为title以及NSUserActivity上的title设置CSSearchableItemAttributeSet,还是仅设置其中一个?{1}}?与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;

2 个答案:

答案 0 :(得分:1)

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

  1. 可通过两个标题搜索项目。
  2. 搜索结果将具有在NSUserActivity实例中指定的标题。
  3. 如果指定了NSUserActivity和CSSearchableItemAttributeSet的关键字属性,则可以使用CSSearchableItemAttributeSet实例中指定的关键字搜索该项,而不是NSUserActivity实例中指定的关键字。

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

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

答案 1 :(得分:1)

在与DTS讨论此主题后,这是他们的结论:

  

关于属性,例如keywords,可以在两者上设置   NSUserActivity和NSUserActivity的嵌入式   CSSearchableItemAttributeSet,来自Core Spotlight的建议   工程是你只是在它上面设置它们   CSSearchableItemAttributeSet。

     

[titledisplayName]与软相似或多或少相同   这意味着,如果该项目的标题非常长,则会进入   title属性和缩写标题将在   displayName财产。