美文网首页
iOS 中 Spotlight 的使用

iOS 中 Spotlight 的使用

作者: 舌尖上的大胖 | 来源:发表于2017-07-30 21:09 被阅读0次

    iOS 中很早就推出了 Spotlight 功能,用于搜索已经安装的应用。自从 iOS 9 之后,更可以通过 Core Spotlight Framework 来实现进行应用内容的搜索。官方文档里有详细的说明,这里做个整体的介绍。

    使 App 的内容可被搜索需要如下几步:

    • 创建一个 CSSearchableItemAttributeSet 对象 myCSSearchableItemAttributeSet,并且为你想要索引的内容,指定属性描述。
    • 创建一个 CSSearchableItem 对象 myCSSearchableItem,以展示你想搜索的内容。CSSearchableItem 对象具备唯一标识符,以供后续引用。
    • 如果需要,指定 Domain 标识符,以便于将多个 Item 收集到一起,作为一个组来管理。
    • myCSSearchableItemAttributeSetmyCSSearchableItem 关联起来。
    • myCSSearchableItem 加入索引。

    从 Spotlight 搜索结果返回 App

    使用 NSUserActivity
    来帮助用户在点击搜索结果的时候,调回至 App。
    在搜索项被点击时,AppDelegate 的

    - application:continueUserActivity:restorationHandler:
    

    方法会被回调。

    Core SpotlightNSUserActivity 使用
    CSSearchableItemAttributeSet 对象来描述一个可搜索项,并且提供丰富的元数据,用于在搜索结果中显示。

    代码实例

    引用 Core Spotlight framework
    #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000
    #import <CoreSpotlight/CoreSpotlight.h>
    #import <MobileCoreServices/MobileCoreServices.h>
    #endif
    
    创建相关搜索项

    其中,每个 SearchableItem 与一个 SearchableItemSet 对应配对,需要多个搜索项时,创建多个配对,最后把 SearchableItem 数组加入索引。

    /* 
     创建属性
     */
    NSString *sUTTypePNG = (__bridge NSString *)kUTTypePNG;
    CSSearchableItemAttributeSet *siaSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:sUTTypePNG];
    siaSet.keywords = @[@"aa", @"bb", @"cc"];
    siaSet.displayName = @"这里显示标题";
    //或者使用这个控制标题
    siaSet.title = @"这里显示标题";
    //这里设置描述
    siaSet.contentDescription = @"这里显示描述";
    
    /*
     创建搜索项
     */
    CSSearchableItem *si = [[CSSearchableItem alloc] initWithUniqueIdentifier:@"Item1"
                                                             domainIdentifier:@"com.bahb.test"
                                                                 attributeSet:siaSet];
    
    /*
     将 SearchableItem 加入索引
     */
    [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[si] completionHandler:nil];
    
    在 Application Delegate 中响应回调
    - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler {
        if ([[userActivity activityType] isEqualToString:CSSearchableItemActionType]) {
            NSString *uniqueIdentifier = [userActivity.userInfo objectForKey:CSSearchableItemActivityIdentifier];
            // 接受事先定义好的数值,如果是多个参数可以使用把json转成string传递过来,接受后把string在转换为json
            NSLog(@"传递过来的值:[%@]", uniqueIdentifier);
            // 做需要的处理
            // ....
        return YES;
    }
    

    参考资料:
    https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/AppContent.html

    (完)

    相关文章

      网友评论

          本文标题:iOS 中 Spotlight 的使用

          本文链接:https://www.haomeiwen.com/subject/wcbklxtx.html