使用NSUserActivity使应用程序活动和状态可搜索

时间:2015-06-15 01:49:52

标签: ios objective-c ios9 nsuseractivity

以下是我试图实现的应用程序活动和状态可搜索但无法在iOS搜索中显示的代码

NSUserActivity *userActivity = [[NSUserActivity alloc]initWithActivityType:@"com.mycompany.activity-type"];

userActivity.title = @"Hello world from in app search";
userActivity.keywords = [NSSet setWithArray:@[@"Hello",@"Welcome", @"search"]];
userActivity.userInfo = @{@"id":@"com.example.state"};

userActivity.eligibleForSearch = YES;    
[userActivity becomeCurrent];

Link让我的问题更清晰。

4 个答案:

答案 0 :(得分:21)

来自Apple论坛:

  

有一些人咬了几个人(包括我自己)就是这个   活动不得解除分配。如果您的代码仅适用于   NSUserActivities(即另外不使用CoreSpotlight)然后 make   确保您的活动没有立即解除分配   在我的   例如,我有分配NSUA的代码,设置了一些属性   在它上面,调用becomeCurrent,但随后对象就会消失   范围和解除分配。如果您这样做,请尝试折腾活动   进入一个强大的属性,看看你是否可以看到结果   搜索范围。

https://forums.developer.apple.com/message/13640#13640

答案 1 :(得分:6)

我发现在调用-becomeCurrent之前,您必须将已创建的NSUserActivity实例分配给当前可见的UIViewControllers的userActivity属性。它已经为我修复了这些项目,这些项目立即出现在其他设备上的切换和同一设备上的聚光灯搜索中。

答案 2 :(得分:0)

我遇到了同样的问题,我在开发论坛上看到,在种子1中它只能在设备上运行。我能够在设备上工作。

这可能与切换一样,只会遗憾地在设备上运行。

答案 3 :(得分:-2)

我也无法使用beta 2。 使用CSSearchableItemAttributeSet

CSSearchableItemAttributeSet* attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString*)kUTTypeImage];
attributeSet.title = myobject.title;
attributeSet.keywords = [myobject.desc componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
attributeSet.contentDescription = myobject.desc;
if (myobject.images.count > 0) {
    attributeSet.thumbnailData = myobject.myimagedata;
}
attributeSet.rating = @(myobject.rating.integerValue / 2);

CSSearchableItem* item;
item = [[CSSearchableItem alloc] initWithUniqueIdentifier:@"..." domainIdentifier:@"..." attributeSet:attributeSet];
[[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item] completionHandler: ^(NSError * __nullable error) {
    NSLog(@"Search item indexed");
}];
但是,即使有图像也能正常工作。 我无法工作的是在任何地方出现的评级。