2

我想让我的应用程序为 Spotlight 索引做好准备,所以我有下面的代码来向 Core Spotlight 添加一个项目:

CSSearchableItemAttributeSet *attributeSet = [[CSSearchableItemAttributeSet alloc]initWithItemContentType:(NSString *)kUTTypeImage];

attributeSet.title = appName;
attributeSet.contentDescription = appDescription;

attributeSet.keywords = appKeywordsArray;

UIImage *image = [UIImage imageNamed:@"tile-blue.png"];
NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(image)];
attributeSet.thumbnailData = imageData;

CSSearchableItem *item = [[CSSearchableItem alloc]initWithUniqueIdentifier:appIdentifier domainIdentifier:@"com.myapp" attributeSet:attributeSet];

[[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item] completionHandler: ^(NSError * __nullable error) {
    if (!error)
        NSLog(@"Search item indexed");
}];

因此,每次运行时,它都会记录Search item indexed,因此在索引期间没有错误。但是,当我在 Spotlight 中搜索时,什么也没有出现。我究竟做错了什么?

4

4 回答 4

2

目前 Spotlight 似乎不适用于某些设备。

您的代码应该可以在模拟器上运行。

于 2015-06-25T15:32:05.230 回答
1

来自 Apple iOS 9 Beta 5 文档:

- (void)indexSearchableItems:(NSArray<CSSearchableItem *> * _Nonnull)items
           completionHandler:(void (^ _Nullable)(NSError * _Nullable error))completionHandler

完成处理程序:当数据已被索引记录时调用的块,这意味着索引会记录它必须执行此操作。如果完成处理程序返回错误,则表示数据未正确记录,客户端应重试请求。

所以这意味着当块被执行并且你的代码记录到控制台时,索引已经确认它需要执行那个操作,而不是它已经完成了你的项目的索引。

于 2015-08-18T17:48:21.713 回答
0
  Not all devices support CoreSpotlight Search.
  iPhone 4S doesn't support but iPhone 5 does.

if ([CSSearchableIndex isIndexingAvailable]) {
    NSLog(@"Spotlight indexing is available on this device");
    CSSearchableItemAttributeSet *attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeImage];

    attributeSet.title = @"SpotLight Search Demo App";
    attributeSet.contentDescription = @"I am searching this in spotlight";

    attributeSet.keywords = @[@"Search Demo",@"Spotlight"];

    UIImage *image = [UIImage imageNamed:@"Icon.png"];
    NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(image)];
    attributeSet.thumbnailData = imageData;

    CSSearchableItem *item = [[CSSearchableItem alloc]
                              initWithUniqueIdentifier:@"com.suraj"
                              domainIdentifier:@"spotlight.SpotlightSearchDemo"
                              attributeSet:attributeSet];

    [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item]
                                                   completionHandler: ^(NSError * __nullable error) {
                                                       if (!error) {
                                                           NSLog(@"Search item is indexed");
                                                       }
                                                   }];
} else {
    NSLog(@"Spotlight indexing is not available on this device");
} 
于 2015-10-08T12:51:33.270 回答
0

对你来说可能为时已晚。有我的解决方案:

CSSearchableItem在完成之前,您必须保留对象
[[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item] completionHandler: ^(NSError * __nullable error) { if (!error) NSLog(@"Search item indexed"); }];

于 2017-10-17T07:32:17.420 回答