我想让我的应用程序为聚光灯索引做好准备,所以我已经获得了以下代码来向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中搜索时,没有任何显示。我做错了什么?
答案 0 :(得分:2)
目前Spotlight似乎无法在某些设备上运行。
您的代码应该可以在模拟器上运行。
答案 1 :(得分:1)
来自Apple iOS 9 Beta 5文档:
- (void)indexSearchableItems:(NSArray<CSSearchableItem *> * _Nonnull)items
completionHandler:(void (^ _Nullable)(NSError * _Nullable error))completionHandler
completionHandler:当数据被索引记录时调用的块, 这意味着索引记下它必须执行此操作 操作。如果完成处理程序返回错误,则表示错误 数据没有正确记录,客户端应该重试 请求。
所以这意味着当块被执行,并且你的代码记录到控制台时,索引已经确认它需要执行该操作,而不是它已经完成索引你的项目。
答案 2 :(得分: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");
}
答案 3 :(得分:0)
对你来说可能为时已晚。有我的解决方案:
在完成之前,您必须保留CSSearchableItem
个对象
[[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item] completionHandler: ^(NSError * __nullable error) {
if (!error)
NSLog(@"Search item indexed");
}];