iOS 9 的search API(Core Spotlight内容索引、内容回调)

iOS 9 Core Spotlight 框架

       Core Spotlight框架用来索引应用内的内容。它创建的索引存储在设备上,不与Apple共享,也不能被其他应用或者设备访问。
Apple的指南中特别提到Core Spotlight创建的索引最好在几千的数量级别之下。索引太多很有可能会带来性能问题

  • CSSearchableItemAttributeSet:索引属性集合,也即是索引的内容本身。集合中可以存储以下属性:title, contentDescription, thumbnailData, rating, keywords.
  • CSSearchableItem:用来表示一个被索引的条目,通过来可以关联到应用内的记录。CSSearchableItem依赖于,它在构建的时候需要传入一个CSSearchableItemAttributeSet对象。

实战

1.引用头文件

 #import 
 #import 

2.创建索引

-(void) buildSearchableItem{
    CSSearchableItemAttributeSet*  attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString*)kUTTypeText];

    attributeSet.title = self.name;
    CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier:
                              [self indexPath]
                                                               domainIdentifier:@"markdisk.file" attributeSet:attributeSet];

    [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item] completionHandler:^(NSError * error) {
        if (error) {
            NSLog(@"buildSearchableItem Error:%@",error.localizedDescription);

        }
    }];
}

3.删除索引

 [[CSSearchableIndex defaultSearchableIndex] deleteSearchableItemsWithIdentifiers:@[[_itemToRemove indexPath] ] completionHandler:^(NSError * _Nullable error) {
            if (error) {
                NSLog(@"%@", error.localizedDescription);
            }
        }];

提供删除的API

- deleteAllSearchableItemsWithCompletionHandler:
- deleteSearchableItemsWithDomainIdentifiers:completionHandler:
- deleteSearchableItemsWithIdentifiers:completionHandler:

4.Appdelegate.m中响应搜索结果

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler {
    if ([[userActivity activityType] isEqualToString:CSSearchableItemActionType]) {
    //获取唯一ID,在MarkDisk中,它即是文件的相对路径
        NSString *uniqueIdentifier = [userActivity.userInfo objectForKey:CSSearchableItemActivityIdentifier];
            UINavigationController *nav = (UINavigationController *)self.window.rootViewController;
    UIViewController *VC = nav.viewControllers.firstObject;
    // 调用自己的方法
       //显示对应的文件,代码略 
    ...
    }
    return YES;
}

你可能感兴趣的:(iOS 9 的search API(Core Spotlight内容索引、内容回调))