【iOS9系列】- CoreSportlight内容索引的使用
【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内容索引的使用的更多相关文章
- .NET Core微服务之路:文章系列和内容索引汇总 (v0.52)
微服务架构,对于从事JAVA架构的童鞋来说,早已不是什么新鲜的事儿,他们有鼎鼎大名的Spring Cloud这样的全家桶框架支撑,包含微服务核心组件如 1. Eureka:实现服务注册与发现. 2. ...
- [MySQL性能优化系列]巧用索引
1. 普通青年的索引使用方式 假设我们有一个用户表 tb_user,内容如下: name age sex jack 22 男 rose 21 女 tom 20 男 ... ... ... 执行SQL语 ...
- .NET Core微服务系列基础文章索引(目录导航Final版)
一.为啥要总结和收集这个系列? 今年从原来的Team里面被抽出来加入了新的Team,开始做Java微服务的开发工作,接触了Spring Boot, Spring Cloud等技术栈,对微服务这种架构有 ...
- .NET Core微服务系列基础文章索引(目录导航Draft版)
一.为啥要写这个系列? 今年从原来的Team里面被抽出来加入了新的Team,开始做Java微服务的开发工作,接触了Spring Boot, Spring Cloud等技术栈,对微服务这种架构有了一个感 ...
- Confluence 6 查看内容索引概要
内容索引,通常也被称为查找索引,这个索引被用来在 Confluence 中支持查找.这个索引同时也被其他的一些功能使用,例如在归档邮件中构建邮件主题,View Space Activity 的特性和将 ...
- 【iOS9系列】-3DTouch开发
[iOS9系列]-3DTouch开发 第一:简介 3DTouch 是iOS9系统系统下,在iPhone6s(iPhone6s Plus)手机上才能够使用的功能.熟练使用后,发现还是很便捷的. 但是模拟 ...
- (转) 淘淘商城系列——CMS内容管理系统工程搭建
http://blog.csdn.net/yerenyuan_pku/article/details/72825801 淘淘商城系列——CMS内容管理系统工程搭建 上文我们一起搭建了表现层中的商城门户 ...
- SQL Server 复制系列(文章索引)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 前言(Introduction) 复制逻辑结构图(Construction) 系列文章索引(Catalog) 总结&am ...
- SQL Server调优系列基础篇 - 索引运算总结
前言 上几篇文章我们介绍了如何查看查询计划.常用运算符的介绍.并行运算的方式,有兴趣的可以点击查看. 本篇将分析在SQL Server中,如何利用先有索引项进行查询性能优化,通过了解这些索引项的应用方 ...
随机推荐
- JavaScript:对Object对象的一些常用操作总结
JavaScript对Object对象的一些常用操作总结. 一.Object.assign() 1.可以用作对象的复制 var obj = { a: 1 }; var copy = Object.as ...
- django的基本操作流程
pip install django cd Desktop/课上代码02/ #进入到创建项目的目录 django-admin startproject 项目的名称 #创建项目 __ini ...
- python 学习总结3
Python蟒蛇绘制 一.实现程序如下 import turtle turtle.setup (650, 350, 200, 200)#turtle的绘图窗体turtle.setup(width, h ...
- 《算法导论》 — Chapter 8 线性时间排序
序 到目前为止,关于排序的问题,前面已经介绍了很多,从插入排序.合并排序.堆排序以及快速排序,每一种都有其适用的情况,在时间和空间复杂度上各有优势.它们都有一个相同的特点,以上所有排序的结果序列,各个 ...
- POJ 1414 Life Line(搜索)
题意: 给定一块正三角形棋盘,然后给定一些棋子和空位,棋子序号为a(1<=a<=9),group的定义是相邻序号一样的棋子. 然后到C(1<=N<=9)棋手在空位放上自己序号C ...
- struts2访问或添加几个属性(request/session/application属性)
https://blog.csdn.net/hebiao100/article/details/7385055 struts2添加request.session.application属性 第一种方法 ...
- POJ 1006-Biorhythms,中国剩余定理,学信安的路过!
Biorhythms 我竟然1A了, 终于从一天的浑噩中找回点自信了.人生第一次做中国剩余定理的题 ...
- 洛谷 P2008 大朋友的数字
DP,动态规划 树状数组 最长不下降子序列 by GeneralLiu 题目 就是说给一串由 0~9 组成的序列 求 以 i (1~n) 结尾 的 最长不下降子序列 的 和 (最长不下降子序 ...
- PHP 常见问题2
11.能够使 HTML 和 PHP 分离开使用的模板(1 分) 答: Smarty,Dwoo,TinyButStrong,Template Lite,Savant,phemplate,XTemplat ...
- OC-scrollview加载多个控制器界面的优化
在开发过程中,经常有一个控制器中多个字控制器界面的管理,如下图: 这种实现方式,很多种,今天主要记录用scrollview实现的方法.并且只加载当前显示界面的数据. 思路: (1)创建3个需要展示的控 ...