首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使多个NSUserActivity实例可搜索

使多个NSUserActivity实例可搜索
EN

Stack Overflow用户
提问于 2015-08-10 21:29:18
回答 3查看 922关注 0票数 2

我计划让我的一些应用程序内容可以公开索引,为此我使用了NSUserActivity。从我到目前为止的实验中,我发现很明显,在搜索结果中出现的唯一活动是最后一个调用becomeCurrent的活动。有没有办法让我的所有活动都是可搜索的?

下面的代码在我的appDelegate上:

代码语言:javascript
复制
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];
EN

回答 3

Stack Overflow用户

发布于 2015-08-10 23:43:52

嘿,我的代码和你的非常类似,非常像,spotlight能够索引我所有的NSUserActivity对象。我的猜测是,一旦发生下一次循环迭代,您的NSUserActivity对象就会退出引用。尝试添加一个强属性。

来自苹果论坛上的这个来源:https://forums.developer.apple.com/message/13640#13640

在我的例子中,我有分配

的代码,在它上面设置一些属性,调用becomeCurrent,但是对象会超出作用域并被释放。如果您正在执行此操作,请尝试将该活动放入一个强属性中,以查看您是否可以在搜索时看到结果。

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

票数 0
EN

Stack Overflow用户

发布于 2015-09-09 21:29:20

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

代码语言:javascript
复制
activity.requiredUserInfoKeys = [NSSet setWithArray:@[@"additional1"]];
票数 0
EN

Stack Overflow用户

发布于 2015-09-13 18:05:41

我也遇到过同样的问题。我认为这是因为之前的用户活动没有足够的时间按系统索引元数据,下一个用户活动已经成为当前用户活动,所以只有最后一个用户活动是可搜索的。

我的解决方案是将后一个放入dispatch_after块中,并延迟1.5秒,使它们每个都有时间被索引。

如果有人有更好的解决方案,我将不胜感激。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31920882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档