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

Ios 使用NSUserActivity使应用程序活动和状态可搜索,ios,objective-c,ios9,nsuseractivity,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:@

下面是我试图实现的代码,以使应用程序活动和状态可搜索,但无法在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];

为了让我的问题更清楚。

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

我遇到了同样的问题,我在开发论坛上读到,在seed 1中,它只在设备上工作。我能让它在设备上工作


很遗憾,这可能和切换一样,只能在设备上工作。

我也无法让它在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");
}];
不过,即使是图像也能起作用。 我无法工作的是在任何地方显示的评级。

来自苹果论坛:

有一件事咬伤了一些人(包括我自己),那就是 不得取消分配活动。如果您的代码仅用于 NSUserActivities(即不使用CoreSpotlight)然后make 确保您的活动不会立即解除分配
在我的 在这种情况下,我有一个代码,它分配NSUA,设置一些属性 在它上面,调用成为当前的,但随后对象将退出 范围和解除分配。如果你这样做,试着抛开活动 进入一个强大的属性,看看你是否可以看到结果,然后当你 搜索


在integraton Core Spotlight API之后您也尝试过吗?是的,我添加了Core Spotlight和MobileCoReservicesOK。那么您已经实现了所有必需的核心聚光灯方法了吗?我知道这不是必需的,但苹果公司建议它与NSUserActivity一起使用。@Ayush,你解决了吗?你解决了吗?同样的问题,我也无法做到这一点,一个解决办法是将CSSearchItem与活动关联起来,这完全有道理。对于那些创建类只是为了索引CoreSpotlight和UserActivity之类的东西的人来说,我所做的是创建一个静态NSMutableArray*activityArray=nil;在+(void)中将其初始化为空可变数组,然后将活动添加到其中。这可能有点过分了,但到目前为止它仍在发挥作用,我会在以后改进它。