【iOS9系列】- CoreSportlight内容索引的使用

前言

在iOS9中新增加了的CoreSportlight内容索引,这个还是比较实用的,当我们的App比较多的时候,我们会实用iOS系统的自带的搜索栏的“搜索”功能(iOS很方便的下拉即可呼出这个选项),去查找APP应用,短信,或者其他内容,这是很方便的,那么我们能不能直接在“搜索”应用内部的东西呢,这样也方便用户查找,同时也有提提高我们APP的出镜率,特别是笔记类的应用,这个很方便用户不进入APP就可以直接进行查找的操作的。

注:本文Demo代码完整的Demo代码下载,欢迎Star。

iOS系统中使用“搜索功能”的截图

1.1集成CoreSportlight

集成CoreSportlight需要导入头文件#import <CoreSpotlight/CoreSpotlight.h>,然后创建一个数组,里面元素的类型是CSSearchableItem *,把我们希望被系统索引到的东西,添加到数组中。

同时要能满足数组的的要求,我们需要通过CSSearchableItemAttributeSet来分别设置title:标题,contentDescription:描述信息,thumbnailData:图片,类型是NSData。

然后利用[[CSSearchableItem alloc]initWithUniqueIdentifier:model.sId domainIdentifier:@"coreSportlightDemo" attributeSet:csSet];来把CSSearchableItemAttributeSet封装成CSSearchableItem,同时UniqueIdentifier字段,是我们的信息被搜索到后,拿到被点击条目唯一值

最后

[[CSSearchableIndex defaultSearchableIndex]indexSearchableItems:(NSArray<CSSearchableItem *> *)items completionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler,来把需要索引的信息注入到系统中,这样系统就会“搜索”到我们APP中的内容了。

NSMutableArray<CSSearchableItem *> *items = [NSMutableArray array];

for (NewsModel *model in self.dataArray) {
CSSearchableItemAttributeSet *csSet = [[CSSearchableItemAttributeSet alloc]initWithItemContentType:@"test"];
csSet.title = model.title;
csSet.contentDescription = model.webUrl;
csSet.thumbnailData = UIImagePNGRepresentation([UIImage imageNamed:model.imgUrl]); CSSearchableItem *csItem = [[CSSearchableItem alloc]initWithUniqueIdentifier:model.sId domainIdentifier:@"coreSportlightDemo" attributeSet:csSet];
[items addObject:csItem];
} //将值注入到系统中
[[CSSearchableIndex defaultSearchableIndex]indexSearchableItems:items completionHandler:^(NSError * _Nullable error) {
if (error) {
NSLog(@"had error:%@",error);
}
}];

完成好以上的操作后,我们运行APP,然后把APP进入到后台,在“搜索”界面中输入title字段的内容,比如“osc”,系统就会匹配到我们APP的内容,点击后,就可以进入到我们的APP了。

1.2使用系统回调

我们点击了被系统搜索出的条目后,想知道具体信息,怎么办呢?

AppDelegate中添加方法- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray * __nullable restorableObjects))restorationHandler,我们打印引字典信息,发现只有唯一的Key值kCSSearchableItemActivityIdentifier,打印信息,就会发现这就是我们前面所设置的UniqueIdentifier字段了,当然,什么都不设置,默认是会进入APP的。

-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
NSString *sId = userActivity.userInfo[@"kCSSearchableItemActivityIdentifier"];
NSLog(@"%@--:%@",userActivity.userInfo,sId); return YES;
}

注:本文Demo代码完整的Demo代码下载,欢迎Star。


作者:Darren

微博:@IT_攻城师

github:@Darren90

博客:http://www.cnblogs.com/fengtengfei/

欢迎您的访问...

【iOS9系列】- CoreSportlight内容索引的使用的更多相关文章

  1. .NET Core微服务之路:文章系列和内容索引汇总 (v0.52)

    微服务架构,对于从事JAVA架构的童鞋来说,早已不是什么新鲜的事儿,他们有鼎鼎大名的Spring Cloud这样的全家桶框架支撑,包含微服务核心组件如 1. Eureka:实现服务注册与发现. 2. ...

  2. [MySQL性能优化系列]巧用索引

    1. 普通青年的索引使用方式 假设我们有一个用户表 tb_user,内容如下: name age sex jack 22 男 rose 21 女 tom 20 男 ... ... ... 执行SQL语 ...

  3. .NET Core微服务系列基础文章索引(目录导航Final版)

    一.为啥要总结和收集这个系列? 今年从原来的Team里面被抽出来加入了新的Team,开始做Java微服务的开发工作,接触了Spring Boot, Spring Cloud等技术栈,对微服务这种架构有 ...

  4. .NET Core微服务系列基础文章索引(目录导航Draft版)

    一.为啥要写这个系列? 今年从原来的Team里面被抽出来加入了新的Team,开始做Java微服务的开发工作,接触了Spring Boot, Spring Cloud等技术栈,对微服务这种架构有了一个感 ...

  5. Confluence 6 查看内容索引概要

    内容索引,通常也被称为查找索引,这个索引被用来在 Confluence 中支持查找.这个索引同时也被其他的一些功能使用,例如在归档邮件中构建邮件主题,View Space Activity 的特性和将 ...

  6. 【iOS9系列】-3DTouch开发

    [iOS9系列]-3DTouch开发 第一:简介 3DTouch 是iOS9系统系统下,在iPhone6s(iPhone6s Plus)手机上才能够使用的功能.熟练使用后,发现还是很便捷的. 但是模拟 ...

  7. (转) 淘淘商城系列——CMS内容管理系统工程搭建

    http://blog.csdn.net/yerenyuan_pku/article/details/72825801 淘淘商城系列——CMS内容管理系统工程搭建 上文我们一起搭建了表现层中的商城门户 ...

  8. SQL Server 复制系列(文章索引)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 前言(Introduction) 复制逻辑结构图(Construction) 系列文章索引(Catalog) 总结&am ...

  9. SQL Server调优系列基础篇 - 索引运算总结

    前言 上几篇文章我们介绍了如何查看查询计划.常用运算符的介绍.并行运算的方式,有兴趣的可以点击查看. 本篇将分析在SQL Server中,如何利用先有索引项进行查询性能优化,通过了解这些索引项的应用方 ...

随机推荐

  1. JavaScript:对Object对象的一些常用操作总结

    JavaScript对Object对象的一些常用操作总结. 一.Object.assign() 1.可以用作对象的复制 var obj = { a: 1 }; var copy = Object.as ...

  2. django的基本操作流程

    pip   install django cd Desktop/课上代码02/ #进入到创建项目的目录   django-admin startproject 项目的名称  #创建项目   __ini ...

  3. python 学习总结3

    Python蟒蛇绘制 一.实现程序如下 import turtle turtle.setup (650, 350, 200, 200)#turtle的绘图窗体turtle.setup(width, h ...

  4. 《算法导论》 — Chapter 8 线性时间排序

    序 到目前为止,关于排序的问题,前面已经介绍了很多,从插入排序.合并排序.堆排序以及快速排序,每一种都有其适用的情况,在时间和空间复杂度上各有优势.它们都有一个相同的特点,以上所有排序的结果序列,各个 ...

  5. POJ 1414 Life Line(搜索)

    题意: 给定一块正三角形棋盘,然后给定一些棋子和空位,棋子序号为a(1<=a<=9),group的定义是相邻序号一样的棋子. 然后到C(1<=N<=9)棋手在空位放上自己序号C ...

  6. struts2访问或添加几个属性(request/session/application属性)

    https://blog.csdn.net/hebiao100/article/details/7385055 struts2添加request.session.application属性 第一种方法 ...

  7. POJ 1006-Biorhythms,中国剩余定理,学信安的路过!

                                                       Biorhythms 我竟然1A了, 终于从一天的浑噩中找回点自信了.人生第一次做中国剩余定理的题 ...

  8. 洛谷 P2008 大朋友的数字

    DP,动态规划   树状数组   最长不下降子序列 by  GeneralLiu 题目 就是说给一串由 0~9 组成的序列 求 以 i (1~n) 结尾 的 最长不下降子序列 的 和 (最长不下降子序 ...

  9. PHP 常见问题2

    11.能够使 HTML 和 PHP 分离开使用的模板(1 分) 答: Smarty,Dwoo,TinyButStrong,Template Lite,Savant,phemplate,XTemplat ...

  10. OC-scrollview加载多个控制器界面的优化

    在开发过程中,经常有一个控制器中多个字控制器界面的管理,如下图: 这种实现方式,很多种,今天主要记录用scrollview实现的方法.并且只加载当前显示界面的数据. 思路: (1)创建3个需要展示的控 ...