我计划让我的一些应用程序内容可以公开索引,为此我使用了NSUserActivity。从我到目前为止的实验中,我发现很明显,在搜索结果中出现的唯一活动是最后一个调用becomeCurrent的活动。有没有办法让我的所有活动都是可搜索的?
下面的代码在我的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];发布于 2015-08-10 23:43:52
嘿,我的代码和你的非常类似,非常像,spotlight能够索引我所有的NSUserActivity对象。我的猜测是,一旦发生下一次循环迭代,您的NSUserActivity对象就会退出引用。尝试添加一个强属性。
来自苹果论坛上的这个来源:https://forums.developer.apple.com/message/13640#13640
在我的例子中,我有分配
的代码,在它上面设置一些属性,调用becomeCurrent,但是对象会超出作用域并被释放。如果您正在执行此操作,请尝试将该活动放入一个强属性中,以查看您是否可以在搜索时看到结果。
如果它仍然不起作用,请告诉我。
发布于 2015-09-09 21:29:20
RequiredUserInfoKeys是NSUserActivity的属性,您必须设置它才能在搜索结果中正常工作。
activity.requiredUserInfoKeys = [NSSet setWithArray:@[@"additional1"]];发布于 2015-09-13 18:05:41
我也遇到过同样的问题。我认为这是因为之前的用户活动没有足够的时间按系统索引元数据,下一个用户活动已经成为当前用户活动,所以只有最后一个用户活动是可搜索的。
我的解决方案是将后一个放入dispatch_after块中,并延迟1.5秒,使它们每个都有时间被索引。
如果有人有更好的解决方案,我将不胜感激。
https://stackoverflow.com/questions/31920882
复制相似问题