使多个NSUserActivity实例可搜索

时间:2015-08-10 13:29:18

标签: search ios9 corespotlight

我打算让我的一些应用内容可以公开转发,为此我使用的是NSUserActivity。从我到目前为止的实验中,我发现显然搜索结果中出现的唯一活动是最后一个被调用的当前活动。有没有办法让我的所有活动都可以搜索?

以下代码在我的appDelegate上:

for (Shop* shop in shopManager)
{
    NSUserActivity* activity = [[NSUserActivity alloc] initWithActivityType:ACTIVITY_OPEN_SHOP];
    activity.userInfo = @{@"additional1": shop.name};
    activity.eligibleForPublicIndexing = YES;
    activity.eligibleForSearch = YES;
    activity.keywords = shop.indexableKeywords;

    CSSearchableItemAttributeSet* attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString*)kUTTypeText];
    attributeSet.title = shop.name;
    attributeSet.contentDescription = shop.indexableDescription;
    attributeSet.keywords = [shop.indexableKeywords allObjects];

    [activity setContentAttributeSet:attributeSet];

    [activity becomeCurrent];
    [activities addObject:activity];
}
self.userActivities = [[NSSet alloc] initWithArray:activities];

2 个答案:

答案 0 :(得分:0)

嘿我的代码非常与您的相似,而且聚光灯能够索引我的所有NSUserActivity对象。我的猜测是,一旦循环的下一次迭代发生,你的NSUserActivity对象就会失去引用。尝试添加强大的属性。

来自Apple论坛的来源: https://forums.developer.apple.com/message/13640#13640

  

在我的情况下,我有代码分配NSUA,设置一些   在它上面的属性,调用becomeCurrent,然后对象将去   超出范围并解除分配。如果你这样做,试试扔掉   活动成一个强大的属性,看看你是否可以看到结果   当你搜索。

如果它仍然不起作用,请告诉我。

答案 1 :(得分:0)

RequiredUserInfoKeys是NSUserActivity的属性,您必须设置该属性才能在搜索结果中正常工作。

@JsonIgnore
private List<SubDocument> subDocumentList;