【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/

欢迎您的访问...

最新文章

  1. iOS6_自动约束 Constraints
  2. hibernate中一对多关系中的inverse,cascade属性
  3. POJ3013 Big Christmas Tree[转换 最短路]
  4. Tesseract-OCR 字符识别---样本训练 [转]
  5. WPF开发时光之痕日记本(一)——富文本编辑器
  6. 二模 (2) day2
  7. js中的隐式转换
  8. 2014年百度之星程序设计大赛 - 资格赛 第二题 Disk Schedule
  9. PLSQL触发器
  10. Linux系统目录结构介绍
  11. 如何通过免费开源ERP Odoo建立你的团队, 销售过程和目标
  12. __x__(30)0908第五天__导航条的练习 &lt;div&gt;版本
  13. hdu 2036 求多边形面积 (凸、凹多边形)
  14. linux 查看端口占用
  15. Kubernetes学习之路(二十二)之Pod资源调度
  16. 什么是.Net, IL, CLI, BCL, FCL, CTS, CLS, CLR, JIT
  17. Android设备广告投放解决方案——大量网络图片、多个网络视频的轮播、缓存与更新
  18. 使用cocos创建的项目,如何进行源码调试?
  19. java内存分配策略
  20. 黄聪:国内com域名转移到Godaddy详细教程(转)

热门文章

  1. Gameia
  2. 用户管理命令--passwd,usermod,userdel
  3. Linux启动流程CentOS6和7的区别
  4. web即时通信技术
  5. Python装饰器粗解学习
  6. C语言学习10
  7. 项目如何发布到tomcat
  8. 关于 HTTP meta 的 IE=edge 说明
  9. selenium grid使用(windows+centos7.4)
  10. 大数据学习——flume日志分类采集汇总