8-11搜索相关

iOS搜索相关

项目用到search api 和 Spotlight
以下是:

search api : NSUserActivity

在不依赖CoreSpotlight时用NSUserActivity实现搜索,必须要保证activity是强引用的,直到它被添加到索引。否则,您设置的 activity会在dealloc 的时候消失。

一:通过属性创建控制器的activity,保证activity是强引用的

二:是使用userActivity 的UIResponder属性,并重写updateUserActivityState方法

1.定义属性
@property (nonatomic, strong) NSUserActivity *userActivity;
2.添加搜索关键字
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0)
    {
        //创建一个对象,这里的type用于区分搜索的类型
        self.userActivity = [[NSUserActivity alloc] initWithActivityType:@"SearchTest"];
        //显示的标题
        self.userActivity.title = @"鹿顶记-为会员提供更多、更高品质服务";
        // 搜索的关键字
        self.userActivity.keywords = [NSSet setWithArray: @[@"全球",@"新发现"]];
        // 支持Search
        self.userActivity.eligibleForSearch = YES;
        //提交设置
        [self.userActivity becomeCurrent];
    }

3.调起app
- (BOOL)application:(nonnull UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray * __nullable))restorationHandler{
    
    NSString *activityType = userActivity.activityType;
    if ([activityType isEqual:LU9_UserActivitySearch])
    {
        return YES;
    }
    return NO;
}

Spotlight

</br>
想在App中使用Spotlight,首先得引入Core Spotlight Framework,Targets ->General -> linked Frameworks and Libraries 点击加号添加CoreSpotlight.framework

导入头文件

#import <CoreSpotlight/CoreSpotlight.h>
#import <MobileCoreServices/MobileCoreServices.h>
1.关联搜索
- (void)supportSpotlightSearch {
      dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
      dispatch_async(queue, ^{
          @try {

                //创建SearchableItems的数组
                NSMutableArray *searchableItems = [[NSMutableArray alloc] initWithCapacity:你的搜索数组];
                for (模型 *akind in array) {
                    //1.创建条目的属性集合
                    CSSearchableItemAttributeSet * attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString*) kUTTypeImage];
                    
                    //2.给属性集合添加属性
                    attributeSet.title = akind.fTitle;
                    attributeSet.contentDescription = [NSString stringWithFormat:@"%@",  akind.content];
                    
                    //                attributeSet.thumbnailData = UIImagePNGRepresentation([UIImage imageNamed:[NSString stringWithFormat:@"%d.png", i+1]]);
                    //
                    //3.属性集合与条目进行关联
                    CSSearchableItem *searchableItem = [[CSSearchableItem alloc] initWithUniqueIdentifier:[NSString stringWithFormat:@"%@", akind.fid] domainIdentifier:@"SpotLight_Category" attributeSet:attributeSet];
                    
                    //把该条目进行暂存
                    [searchableItems addObject:searchableItem];
                }
             //4.吧条目数组与索引进行关联
             [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:searchableItems completionHandler:^(NSError * _Nullable error) {
                 if (!error) {
                     NSLog(@"%s, %@", __FUNCTION__, [error localizedDescription]);
                 }
             }];
         }
         @catch (NSException *exception) {
             NSLog(@"%s, %@", __FUNCTION__, exception);
         }
         @finally {
        }
     });
 }
2.调起app
- (BOOL)application:(nonnull UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray * __nullable))restorationHandler{
        NSString *uniqueIdentifier = [userActivity.userInfo objectForKey:@"kCSSearchableItemActivityIdentifier"];
         // 这下面的内容是找到导航  跳转到该页面~~~,根据自己的情况改变     
        //层层关闭,统一跳转到首页  
        [kAppDelegate.centerViewDeckController closeOpenView];
        for (UINavigationController *na in kAppDelegate.tabBarController.viewControllers)
        {
            [na popToRootViewControllerAnimated:NO];
        }
        
        [kAppDelegate.tabBarController setSelectedWithIndex:0];
        
        
        Kind *kind = [[Kind alloc] init];
        kind.fid    = uniqueIdentifier;
        kind.fTitle = userActivity.title;
        
        CategoryViewController *categoryVC = [[CategoryViewController alloc] init];
        categoryVC.kind = kind;
        [kAppDelegate.homeNavigationController pushViewController:categoryVC animated:YES];
        
        return YES;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,454评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,553评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,921评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,648评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,770评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,950评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,090评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,817评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,275评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,592评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,724评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,409评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,052评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,815评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,043评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,503评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,627评论 2 350

推荐阅读更多精彩内容