美文网首页
iOS 9 的search API(Core Spotlight

iOS 9 的search API(Core Spotlight

作者: ISwiftUI | 来源:发表于2017-04-16 23:26 被阅读50次

    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;
    }
    

    相关文章

      网友评论

          本文标题:iOS 9 的search API(Core Spotlight

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