转载自:  http://www.cnblogs.com/ludashi/p/4867511.html

iOS开发之集成iOS9中的Core Spotlight Framework搜索App的内容

  Spotlight在iOS9上做了一些新的改进, 也就是开放了一些新的API, 通过Core Spotlight Framework你可以在你的app中集成Spotlight。集成Spotlight的App可以在Spotlight中搜索App的内容,并且通过内容打开相关页面。因为接到开发任务,老大说让在App中支持Spotlight, 于是又搞了搞苹果的官方文档。可以说,集成Spotlight不算复杂,官网上讲的也挺明白的,今天博客就通过一个Demo来集成一下Spotlight。

  苹果官方有关Core Spotlight Framework的链接如下:

  https://developer.apple.com/library/prerelease/ios/documentation/CoreSpotlight/Reference/CoreSpotlight_Framework/index.html#//apple_ref/doc/uid/TP40016250

  一.Demo运行效果

  还是通过一个Demo来进行介绍,Demo运行效果如下。我们App中有关于宫崎骏的的内容,然后在Spotlight中搜索宫崎骏,就可以搜索到相关内容,并且可以点击打开展示相关内容。具体运行效果如下:

  二.集成Core Spotlight Framework

    1.想在App中使用Spotlight,首先得引入Core Spotlight Framework,Targets ->General -> linked Frameworks and Libraries 点击加号添加CoreSpotlight.framework。如下截图所示。

    2.在相应的视图控制器中引入<CoreSpotlight/CoreSpotlight.h>头文件,然后就开始写代码使自己的App内容支持Spotlight搜索了。下面是为Demo添加Spotlight的相关代码。Spotlight搜索出来的东西,每一项就是一个条目即CSSearchableItem的对象,而改对象又关联一个属性集合(CSSearchableItemAttributeSet )该集合中存储了CSSearchableItem对象的相关属性,如果title(标题), contentDescription(内容简介),

thumbnailData(图片)等所需内容。具体请看下方代码描述和代码注释。

    代码描述:

      (1).首先定义了一个temp数组,用来存储在Spotlight中搜索的关键字,也就是Spotlight可以搜索到的App内容。数组中的内容通过循环遍历经过一系列的步骤给Spotlight进行关联。

      (2)在每次遍历内容数组的过程中,需要创建一个CSSearchableItemAttributeSet(属性集合),并给属性集合中的一些属性赋上值。然后再创建一个CSSearchableItem,创建CSSearchableItem时,把其对应的属性集合进行关联。把每次创建好的条目暂存到可变数组中,因为创建好所有的条目后还要和Spotlight的索引(CSSearchableIndex)进行关联。

      (3)通过单例获取CSSearchableIndex的对象,并与我们创建好的CSSearchableItem数组进行关联。具体代码和步骤如下。

 1 - (void)supportSpotlightSearch {
 2     dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
 3     dispatch_async(queue, ^{
 4         @try {
 5             NSArray *temp = @[@"宫崎骏-龙猫", @"宫崎骏-千与千寻", @"宫崎骏-天空之城"];
 6
 7             //创建SearchableItems的数组
 8             NSMutableArray *searchableItems = [[NSMutableArray alloc] initWithCapacity:temp.count];
 9
10             for (int i = 0; i < temp.count; i ++) {
11
12                 //1.创建条目的属性集合
13                 CSSearchableItemAttributeSet * attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString*) kUTTypeImage];
14
15                 //2.给属性集合添加属性
16                 attributeSet.title = temp[i];
17                 attributeSet.contentDescription = [NSString stringWithFormat:@"宫崎骏与%@", temp[i]];
18                 attributeSet.thumbnailData = UIImagePNGRepresentation([UIImage imageNamed:[NSString stringWithFormat:@"%d.png", i+1]]);
19
20                 //3.属性集合与条目进行关联
21                 CSSearchableItem *searchableItem = [[CSSearchableItem alloc] initWithUniqueIdentifier:[NSString stringWithFormat:@"%d", i+1] domainIdentifier:@"ZeluLi.SpotlightSearchDemo" attributeSet:attributeSet];
22
23                 //把该条目进行暂存
24                 [searchableItems addObject:searchableItem];
25             }
26
27             //4.吧条目数组与索引进行关联
28             [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:searchableItems completionHandler:^(NSError * _Nullable error) {
29                 if (!error) {
30                     NSLog(@"%s, %@", __FUNCTION__, [error localizedDescription]);
31                 }
32             }];
33         }
34         @catch (NSException *exception) {
35             NSLog(@"%s, %@", __FUNCTION__, exception);
36         }
37         @finally {
38
39         }
40     });
41 }

    3.处理搜索后条目点击的事件,该事件的处理要在AppDelegate中下面的委托代理方法中进行处理。下面的idetifier就是属性集合与条目进行关联时指定的唯一标示。

 1 - (BOOL)application:(nonnull UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray * __nullable))restorationHandler{
 2
 3     NSString *idetifier = userActivity.userInfo[@"kCSSearchableItemActivityIdentifier"];
 4
 5     UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
 6
 7     ViewController *vc = [navigationController viewControllers][0];
 8     [vc.myImage setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@.png",idetifier]]];
 9
10
11     return YES;
12 }

    DEMO分享地址--github:https://github.com/lizelu/SpotlightSearchDemo

iOS开发之集成iOS9中的Core Spotlight Framework搜索App的内容相关推荐

  1. 如何使用iOS9中的Core Spotlight框架

    如何使用iOS9中的Core Spotlight框架 作者: Gabriel Theodoropoulos,时间:2015/12/22 翻译:BigNerdCoding, 如有错误欢迎指出.原文链接 ...

  2. iOS 9应用开发教程之ios9中实现按钮的响应

    iOS 9应用开发教程之ios9中实现按钮的响应 IOS9实现按钮的响应 按钮主要是实现用户交互的,即实现响应.按钮实现响应的方式可以根据添加按钮的不同分为两种:一种是编辑界面添加按钮实现的响应:另一 ...

  3. 李洪强iOS开发支付集成之支付宝支付

    iOS开发支付集成之支付宝支付 下载支付宝SDK 首先是开发包下载,还是比较难发现的,网上以前文章中的链接都打不开,我找了好久才找到的.最新的地址在这里(注意的是下载出来的SDK包里面并没有传说中的开 ...

  4. iOS开发------简单实现图片多选功能(Photos.framework篇)

    Photos.framework是iOS8后苹果推出的一套替代AssetsLibrary.framework获取相册资源的原生库,至于AL库,欢迎大家给博文iOS开发--简单实现图片多选功能(Asse ...

  5. IOS开发笔记之推广安装(用网页判断是否安装App)

    IOS开发笔记之推广安装(用网页判断是否安装App) 在做App推广的时候,我们经常会用到网页链接下载,亦或是一张二维码,最常见的做法就是将App在iTunes中的下载链接嵌入,当用户扫描或者点击网页 ...

  6. iOS开发:集成微信 SDK 支付篇

    原文链接: https://cainrun.github.io 原文作者: Cain 作者感言 惯例, 开头都是要说些东西的了, 随着现在的App越来越商业化, 很多公司的App都会集成第三方的支付S ...

  7. iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式

    说明: 1)该文简短介绍在iOS开发中遍历字典.数组和集合的几种常见方式. 2)该文对应的代码可以在下面的地址获得:https://github.com/HanGangAndHanMeimei/Cod ...

  8. 玩转 iOS 开发:集成 AliPay - 支付宝

    文章转至: https://cainluo.github.io/14739456388212.html 作者感言 前面我已经写了一篇关于**WeChat SDK的支付篇, 那我们继续研究接下来的支付S ...

  9. iOS开发之内购完全笔记(您已购买此 App 内购买项目。此项目将免费恢复。)

    1.内购流程 1.在 AppStore 中创建相应的物品,创建内购沙盒测试账号 2.客户端从后台获取相应的物品 ID (当然也可以再客户端写死,但后期扩展性就受限制了) 3.依据相应的物品 ID 请求 ...

最新文章

  1. winform解析json
  2. iphone 在设置了initial-scale=1 之后,在设置滚动条之后,没有滑动效果的解决办法...
  3. 我要当皇帝等微信小游戏的wbs
  4. 数据结构学习笔记(七):哈希表(Hash Table)
  5. 巧用.mdb后缀数据库做后门
  6. 安装LibreOffice和字体
  7. 幼儿园计算机教师论文,幼儿园中班教师论文
  8. 95-30-025-java.util-AbstractMap
  9. SSRF 漏洞危害大,应避免被利用攻击内网应用!| 原力计划
  10. Laravel 5无法打开所需的bootstrap /../ vendor / autoload.php
  11. 小程序发布,你方了么?
  12. eXtremeComponents文档
  13. 穿越计算机的迷雾--读书笔记三
  14. 计算机词汇怎么背,如何背诵英语词汇更有效?
  15. GoogleChrome与Firefox的那些事
  16. 解决:未定义标识符 “sleep“ 或 “sleep“:找不到标识符
  17. 周易六十四卦——大畜卦
  18. nus计算机和iss学院,走进新加坡国立大学系统科学院
  19. Vue_实现五星好评效果
  20. 解析因人工智能技术变革而产生的价值观

热门文章

  1. 【java/算法】在3男6女中选5人参加活动,要求男女都有。则不同的选取方式有几种?并列出符合条件的名单
  2. 6、Python量化交易-单均线策略升级1:T+0限制
  3. EtherCAT主站开发“利器”——EC-Master软件协议栈
  4. 【FMC156】基于VITA57.1标准的2路2.5GSPS采样率16位分辨率直流耦合DA播放FMC子卡模块(DAC38J82)
  5. 计算机都要学高等数学和英语么,大学所有专业都要学英语、高数和大学语文吗?...
  6. 【幻灯片制作软件】Focusky教程 | 设置动画进入/强调/退出特效
  7. Mystring类实现运算符重载
  8. Mendeley安装与使用
  9. 几楼电路精灵——解决Cadence多版本共存
  10. 修改火车头采集器PHP环境的方法