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

本文介绍iOS9中的CoreSpotlight框架,该框架用于索引应用内容,并将其存储在本地设备上。文章详细讲解了如何使用CSSearchableItemAttributeSet和CSSearchableItem创建、删除索引以及如何在Appdelegate.m中响应搜索结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

iOS 9 Core Spotlight 框架

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

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

实战

1.引用头文件

 #import <CoreSpotlight/CoreSpotlight.h>
 #import <MobileCoreServices/MobileCoreServices.h>
复制代码

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;
}
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值