【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. [LUOGU] P1962 斐波那契数列

    求斐波那契第n项. [f(n-1) f(n)] * [0,1] = [f(n) f(n+1)] [1,1] 由此原理,根据矩阵乘法的结合律,用快速幂算出中间那个矩阵的n次方即可. 快速幂本质和普通快速 ...

  2. 如何用纯 CSS 创作一个同心圆弧旋转 loader 特效

    效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/OZmXQX 可交互视频教程 此视 ...

  3. new命令的原理

    function Person(name, age) { this.name = name; this.age = age } var person = new Person('小明', 18); c ...

  4. css选择器(1)——元素选择器、类名和id选择器

    css的主要优点之一就是它能很容易地向所有同类型的元素应用一组样式.当然它是通过选择器来实现这一点的. 基本规则结构: 语法= 选择器 +声明块 1.元素选择器——直接使用html元素名,指向文档元素 ...

  5. LeetCode01--两数之和

    ''' 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的 两个 整数. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 示例: 给 ...

  6. Educational Codeforces Round 50 (Rated for Div. 2)的A、B、C三题AC代码

    A题链接:https://codeforces.com/contest/1036/problem/A A题AC代码: #include <stdio.h> #include <std ...

  7. [MVC]Area区域相关技术

    MVC提供Area机制,在同一个项目之内就能够切割出不同的ASP.NET MVC网站. 插入:首先在相同的位置,比如说同一个文件夹(如:Controllers)是不能创建俩个相同名称的文件(如:Hom ...

  8. Ubuntu16.04 搭建svn

    1.安装SVN 安装前先更新一下 sudo apt-get update 接下来安装 sudo apt-get install subversion 2.创建SVN版本库 1.创建home下的svn文 ...

  9. nginx.conf的完整配置说明

    #用户 用户组 user www www; #工作进程,根据硬件调整,有人说几核cpu,就配几个,我觉得可以多一点 worker_processes 5: #错误日志 error_log logs/e ...

  10. luogu1447 [NOI2010]能量采集

    考虑暴力,答案显然是 \(\sum_{i=1}^n\sum_{j=1}^m(2(\gcd(i,j)-1)+1)=\sum_{i=1}^n\sum_{j=1}^m(2\gcd(i,j)-1)\). 考虑 ...