2019独角兽企业重金招聘Python工程师标准>>>

iOS开发之CoreSpotlight框架的应用

CoreSpotlight是iOS提供的一套本地检索推荐功能。开发者可以为自己的应用添加本地索引,用户通过索引中定义的关键字可以搜索并定位到应用程序内的指定功能。

一、一个简单的添加索引示例

- (void)viewDidLoad {[super viewDidLoad];//创建索引属性对象CSSearchableItemAttributeSet *set = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString*)kUTTypeText];//设置索引属性set.title = @"哈哈哈";set.displayName = @"Hello";set.alternateNames = @[@"aaa",@"bbb"];set.keywords = @[@"333",@"444"];set.version = @"1.1";set.path = @"path";set.thumbnailURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"image" ofType:@"png"]];//创建索引CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier:@"1111" domainIdentifier:@"huishao" attributeSet:set];//添加索引[[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item] completionHandler:^(NSError * _Nullable error) {if (error) {NSLog(@"buildSearchableItem Error:%@",error.localizedDescription);}}];
}

在搜索栏中搜索索引的关键字,标题,名称、路径都可以搜索到当前应用程序。例如:

二、CSSearchableIndex索引管理类

CSSearchableIndex类提供了对索引的操作功能,例如添加索引,查找索引,删除索引等等,解析如下:

//代理对象
@property (weak,nullable) id<CSSearchableIndexDelegate> indexDelegate;
//获取索引检索是否可用
+ (BOOL)isIndexingAvailable;
//获取默认提供的索引管理对象
+ (instancetype)defaultSearchableIndex;
//创建一个索引管理对象
- (instancetype)initWithName:(NSString *)name;
- (instancetype)initWithName:(NSString *)name protectionClass:(nullable NSFileProtectionType)protectionClass;
//获取索引管理对象中的所有索引
- (void)indexSearchableItems:(NSArray<CSSearchableItem *> *)items completionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler;
//通过标识符来删除索引
- (void)deleteSearchableItemsWithIdentifiers:(NSArray<NSString *> *)identifiers completionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler;
//通过域名来删除索引
- (void)deleteSearchableItemsWithDomainIdentifiers:(NSArray<NSString *> *)domainIdentifiers completionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler;
//删除所有索引
- (void)deleteAllSearchableItemsWithCompletionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler;

三、CSSearchableIndexDelegate详解

CSSearchableIndexDelegate提供了索引查找的相关回调方法,解析如下:

//这个代理重新索引所有可搜索的数据,并且清除任何本地状态(可能该状态已经被持久化),因为索引已经丢失了
- (void)searchableIndex:(CSSearchableIndex *)searchableIndex reindexAllSearchableItemsWithAcknowledgementHandler:(void (^)(void))acknowledgementHandler;
//根据id重新索引所有可搜索的数据
- (void)searchableIndex:(CSSearchableIndex *)searchableIndex reindexSearchableItemsWithIdentifiers:(NSArray <NSString *> *)identifiersacknowledgementHandler:(void (^)(void))acknowledgementHandler;
//已经进入节能模式调用的方法
- (void)searchableIndexDidThrottle:(CSSearchableIndex *)searchableIndex;
// 结束节能模式调用的方法
- (void)searchableIndexDidFinishThrottle:(CSSearchableIndex *)searchableIndex;
//用来提供数据
- (nullable NSData *)dataForSearchableIndex:(CSSearchableIndex *)searchableIndex itemIdentifier:(NSString *)itemIdentifier typeIdentifier:(NSString *)typeIdentifier error:(out NSError ** __nullable)outError;
//用来提供文件地址
- (nullable NSURL *)fileURLForSearchableIndex:(CSSearchableIndex *)searchableIndex itemIdentifier:(NSString *)itemIdentifier typeIdentifier:(NSString *)typeIdentifier inPlace:(BOOL)inPlace error:(out NSError ** __nullable)outError;

四、CSSearchableItem索引类

CSSearchableItem用来进行索引的定义,解析如下:

//通过设置唯一标识符、域名和属性来定义索引
- (instancetype)initWithUniqueIdentifier:(nullable NSString *)uniqueIdentifier domainIdentifier:(nullable NSString *)domainIdentifierattributeSet:(CSSearchableItemAttributeSet *)attributeSet;
//唯一标识符
@property (copy) NSString *uniqueIdentifier;
//域名标识符
@property (copy, nullable) NSString *domainIdentifier;
//过期时间
@property (copy, null_resettable) NSDate * expirationDate;
//属性
@property (strong) CSSearchableItemAttributeSet *attributeSet;

五、CSSearchableItemAttributeSet类

这个类的主要作用是进行索引信息的配置,CSSearchableItemAttributeSet并没定义太多的属性,CoreSpotlight中提供了这个类的大量Category来补充这个类的功能,解析如下:

//---------------标准---------------------------------
//通过类型创建一个索引信息类
- (instancetype)initWithItemContentType:(nonnull NSString *)itemContentType;
//设置索引的展示名称  可以进行搜索
@property(nullable, copy) NSString *displayName;
//设置可交互的名称数组 可以进行搜索
@property(nullable, copy) NSArray<NSString*> *alternateNames;
//设置索引的完整路径 可以进行搜索
@property(nullable, copy) NSString *path;
//设置索引关联的文件URL
@property(nullable, strong) NSURL *contentURL;
//设置索引缩略图的URL
@property(nullable, strong) NSURL *thumbnailURL;
//设置索引缩略图数据
@property(nullable, copy) NSData *thumbnailData;
//数据最后更改日期
@property(nullable, strong) NSDate *metadataModificationDate;
//内容类型
@property(nullable, copy) NSString *contentType;
//关键字数组
@property(nullable, copy) NSArray<NSString*> *keywords;
//设置标题
@property(nullable, copy) NSString *title;
//设置版本
@property(nullable, copy) NSString *version;
//设置搜索权重 0-100之间
@property(nullable, strong) NSNumber *rankingHint;
//域名标识
@property(nullable, copy) NSString *domainIdentifier;//------------动作相关--------------------------------
//是否支持拨打电话  必须先设置phoneNumbers属性
@property(nullable, strong) NSNumber *supportsPhoneCall;
//是否支持导航 必须先设置经纬度信息
@property(nullable, strong) NSNumber *supportsNavigation;//------------容器相关--------------------------------
//设置容器标题
@property(nullable, copy) NSString *containerTitle;
//设置容器显示名
@property(nullable, copy) NSString *containerDisplayName;
//设置容器标识
@property(nullable, copy) NSString *containerIdentifier;
//设置容器顺序
@property(nullable, strong) NSNumber *containerOrder;//-----------图片相关-------------------------------
//图片高度
@property(nullable, strong) NSNumber *pixelHeight;
//图片高度
@property(nullable, strong) NSNumber *pixelWidth;
//像素总数
@property(nullable, strong) NSNumber *pixelCount;
//颜色空间
@property(nullable, copy) NSString *colorSpace;
//每一帧的bit数
@property(nullable, strong) NSNumber *bitsPerSample;
//拍照时是否开启闪光灯
@property(nullable, strong, getter=isFlashOn) NSNumber *flashOn;
//焦距是否35毫米
@property(nullable, strong, getter=isFocalLength35mm) NSNumber *focalLength35mm;
//设备制造商信息
@property(nullable, copy) NSString *acquisitionMake;
//设备模型信息
@property(nullable, copy) NSString *acquisitionModel;
//... 更多图片信息//----------媒体相关-------------------------------
//编辑者
@property(nullable, copy) NSArray<NSString*> *editors;
//下载时间
@property(nullable, strong) NSDate *downloadedDate;
//文件描述
@property(nullable, copy) NSString *comment;
//内容版权
@property(nullable, copy) NSString *copyright;
//最后使用时间
@property(nullable, strong) NSDate *lastUsedDate;
//添加时间
@property(nullable, strong) NSDate *addedDate;
//时长
@property(nullable, strong) NSNumber *duration;
//联系人关键字
@property(nullable, copy) NSArray<NSString*> *contactKeywords;
//媒体类型
@property(nullable, copy) NSArray<NSString*> *mediaTypes;
//总比特率
@property(nullable, strong) NSNumber *totalBitRate;
//视频比特币
@property(nullable, strong) NSNumber *videoBitRate;
//音频比特率
@property(nullable, strong) NSNumber *audioBitRate;
//组织信息
@property(nullable, copy) NSArray<NSString*> *organizations;
//创建者
@property(nullable, copy) NSString *role;
//语言信息
@property(nullable, copy) NSArray<NSString*> *languages;
//发布者
@property(nullable, copy) NSArray<NSString*> *publishers;
//地址
@property(nullable, strong) NSURL *URL;
//... 更多媒体信息//---------------信息相关---------------------------
//网页数据
@property(nullable, copy) NSData *HTMLContentData;
//文本数据
@property(nullable, copy) NSString *textContent;
//作者数据
@property(nullable, copy) NSArray<CSPerson*> *authors;
//邮箱地址
@property(nullable, copy) NSArray<NSString*> *authorEmailAddresses;
@property(nullable, copy) NSArray<NSString*> *emailAddresses;
//电话号码
@property(nullable, copy) NSArray<NSString*> *phoneNumbers;
//... 更多//--------------地址相关-------------------
//邮编
@property(nullable, copy) NSString *postalCode;
//城市
@property(nullable, copy) NSString *city;
//国家
@property(nullable, copy) NSString *country;
//海拔
@property(nullable, strong) NSNumber *altitude;
//经度
@property(nullable, strong) NSNumber *latitude;
//纬度
@property(nullable, strong) NSNumber *longitude;
//速度
@property(nullable, strong) NSNumber *speed;
//时间戳
@property(nullable, strong) NSDate *timestamp;
//...  更多

转载于:https://my.oschina.net/u/2340880/blog/3014654

iOS开发之CoreSpotlight框架的应用相关推荐

  1. iOS开发之AVKit框架使用

    2019独角兽企业重金招聘Python工程师标准>>> iOS开发之AVKit框架使用 一.引言 在iOS开发框架中,AVKit是一个非常上层,偏应用的框架,它是基于AVFounda ...

  2. iOS开发之Accounts框架详解

    2019独角兽企业重金招聘Python工程师标准>>> iOS开发之Accounts框架详解 Accounts框架是iOS原生提供的一套账户管理框架,其支持Facebook,新浪微博 ...

  3. (0068)iOS开发之AutoLayout框架Masonry使用心得

    苹果官方给出了一些有关自动布局的建议 不论用interfaceBuilder还是用代码来实现自动布局,这些建议都是适用的. (1)不用view的frame.bounds.center来指定view的形 ...

  4. iOS开发之Masonry框架-源码解析

    Masonry是iOS在控件布局中经常使用的一个轻量级框架.Masonry让NSLayoutConstraint使用起来更为简洁.Masonry简化了NSLayoutConstraint的使用方式,让 ...

  5. iOS开发之Masonry框架源码解析

    Masonry是iOS在控件布局中经常使用的一个轻量级框架,Masonry让NSLayoutConstraint使用起来更为简洁.Masonry简化了NSLayoutConstraint的使用方式,让 ...

  6. iOS开发之Masonry框架源码深度解析

    Masonry是iOS在控件布局中经常使用的一个轻量级框架,Masonry让NSLayoutConstraint使用起来更为简洁.Masonry简化了NSLayoutConstraint的使用方式,让 ...

  7. iOS开发之ReplayKit框架学习

    ReplayKit简介 在iOS 9中,ReplayKit 是一款全新的框架,可谓是游戏开发者(开发商)的福音.它可以让玩家更便捷地记录游戏进度或数据以及分享的功能.除此之外更强大的是:ReplayK ...

  8. iOS开发之Masonry框架-使用方法须知

    目录 常用的属性与常量 Masonry使用注意 约束的优先级 Masonry添加约束的方法 修改约束 在哪创建我的约束 创建约束技巧: Masonry是一个轻量级的布局框架,它拥有自己的描述语法(采用 ...

  9. 李洪强iOS开发之Foundation框架—结构体

    Foundation框架-结构体 一.基本知识 Foundation-基础框架.框架中包含了很多开发中常用的数据类型,如结构体,枚举,类等,是其他ios框架的基础. 如果要想使用foundation框 ...

  10. iOS开发之EventKit框架的应用

    一.关于系统日历和提醒事宜 iOS系统自带的Calendar应用非常强大,用户可以在其中添加日程事件,并且其提供了接口供其他应用进行调用,可以向日历中进行事件的读取和写入. 首先,Canlendar应 ...

最新文章

  1. 公开课:如何成为一名高级系统运维工程师(架构师)?
  2. Struts-Logic 标签库
  3. [日常]总结2016年7月入职至2016年7月26号微盘所遇bug
  4. Java 技术之垃圾回收机制
  5. C++静态多态与动态多态
  6. AI:IPPR的数学表示-CNN可视化语义分析
  7. WEB API:语音识别
  8. 首次公开,阿里云开源PolarDB总体架构和企业级特性
  9. OpenCV初探 —— 将OpenCV窗口链接在MFC的PictureControl控件中
  10. 突发!百度张亚勤退休
  11. glm 中 数据类型 与 原始数据(c++ 数组)之间的转换
  12. jsp 页面刷新,EasyUI刷新、加载
  13. 禁止更改计算机名_PiNetwork如何更改名字教程
  14. 学习笔记-Rabin-Karp哈希
  15. 基础才是王道——TCP/IP详解学习笔记
  16. airpin linux电脑,AirPinPcSender
  17. html5手机端页面布局,移动端H5常见的布局方式有哪些
  18. html毕业答辩ppt模板范文,答辩ppt模板|答辩总结范文
  19. laravel实现汉子转拼音
  20. 这世界风华正茂可别辜负好时光

热门文章

  1. (附源码)微信小程序 Demo
  2. Spring Boot入门篇-@RequestParam/@RequestBody配置
  3. 第五天:在博客路由中使用登录验证,配置 nginx解决前后端跨域
  4. C# 实体类的get与set
  5. C# List集合排序、去重方法小结
  6. 大工20春计算机文化基础在线测试1,大工20春《计算机文化基础》在线测试1学习答题资料...
  7. PHP 调用阿里云短信服务API发送短信
  8. 精美js聊天窗口界面代码
  9. Python模块的使用
  10. php汉字组合算法,php数字转汉字的函数算法