iOS9中新API--Spotlight的使用详细解析

来源:爱站网时间:2018-10-08编辑:网友分享
下面是小编给大家分享的一篇iOS9中新API--Spotlight的使用详细解析,感兴趣的朋友跟小编一起来了解一下吧!

  下面是小编给大家分享的一篇iOS9中新API--Spotlight的使用详细解析,感兴趣的朋友跟小编一起来了解一下吧!

  1.Spotloight是什么?

  Spotlight在iOS9上做了一些新的改进, 也就是开放了一些新的API, 通过Core Spotlight Framework你可以在你的app中集成Spotlight。集成Spotlight的App可以在Spotlight中搜索App的内容,并且通过内容打开相关页面。

  Demo演示

  2.如何集成Spotlight

  a.添加所需要的框架

  复制代码 代码如下:

  #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000

  #import

  #import

  #endif

  注,很多APP都是支持iOS9以下的,因此加入#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000,可以解决iOS9以下设备运行崩溃的问题

  b.创建CSSearchableItemAttributeSet 对象

  复制代码 代码如下:

  CSSearchableItemAttributeSet *attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeImage];

  attributeSet.title = spotlightTitle; // 标题

  attributeSet.keywords = keywords; // 关键字,NSArray格式

  attributeSet.contentDescription = spotlightDesc; // 描述

  attributeSet.thumbnailData = photo; // 图标, NSData格式

  // 把图片转换成NSData的方法

  UIImagePNGRepresentation([UIImage imageNamed:@"xxx.png"]

  c.创建可检索条目CSSearchableItem

  复制代码 代码如下:

  // spotlightInfo 可以作为一些数据传递给接受的地方

  // domainId id,通过这个id来判断是哪个spotlight

  CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier:spotlightInfo domainIdentifier:domainId attributeSet:attributeSet];

  d.添加检索入口

  复制代码 代码如下:

  [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item] completionHandler:^(NSError * error) {

  if (error) {

  NSLog(@"indexSearchableItems Error:%@",error.localizedDescription);

  }

  }];

  ========完整代码========

  复制代码 代码如下:

  - (void)insertSearchableItem:(NSData *)photo spotlightTitle:(NSString *)spotlightTitle description:(NSString *)spotlightDesc keywords:(NSArray *)keywords spotlightInfo:(NSString *)spotlightInfo domainId:(NSString *)domainId {

  CSSearchableItemAttributeSet *attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeImage];

  attributeSet.title = spotlightTitle; // 标题

  attributeSet.keywords = keywords; // 关键字,NSArray格式

  attributeSet.contentDescription = spotlightDesc; // 描述

  attributeSet.thumbnailData = photo; // 图标, NSData格式

  // spotlightInfo 可以作为一些数据传递给接受的地方

  // domainId id,通过这个id来判断是哪个spotlight

  CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier:spotlightInfo domainIdentifier:domainId attributeSet:attributeSet];

  [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item] completionHandler:^(NSError * error) {

  if (error) {

  NSLog(@"indexSearchableItems Error:%@",error.localizedDescription);

  }

  }];

  }

  ========加载本地图片的使用方法========

  复制代码 代码如下:

  [self insertSearchableItem:UIImagePNGRepresentation([UIImage imageNamed:@"xxx.png"]) spotlightTitle:@"等风来" description:@"等风来描述" keywords:@[@"鲍鲸鲸",@"大丽花"] spotlightInfo:@"传递过去的值" domainId:@"com.wb.spotlight"];

  ========加载网络图片的使用方法========

  复制代码 代码如下:

  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

  NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://hiphotos.baidu.com/doc/pic/item/eaf81a4c510fd9f905f61934262dd42a2934a48e.jpg"]];

  [self insertSearchableItem:data spotlightTitle:@"等风来" description:@"等风来描述" keywords:@[@"鲍鲸鲸",@"大丽花"] spotlightInfo:@"传递过去的值" domainId:@"com.wb.spotlight"];

  });

  ========删除所有spotlight的方法========

  复制代码 代码如下:

  [[CSSearchableIndex defaultSearchableIndex] deleteAllSearchableItemsWithCompletionHandler:^(NSError * _Nullable error) {

  if (error) {

  NSLog(@"%@", error.localizedDescription);

  }

  }];

  ========删除指定的spotlight的方法========

  复制代码 代码如下:

  [[CSSearchableIndex defaultSearchableIndex] deleteSearchableItemsWithDomainIdentifiers:@"domainId" completionHandler:^(NSError * _Nullable error) {

  if (error) {

  NSLog(@"%@", error.localizedDescription);

  }

  }];

  ========点击spotlight后的响应方法========

  复制代码 代码如下:

  - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler {

  if ([[userActivity activityType] isEqualToString:CSSearchableItemActionType]) {

  NSString *uniqueIdentifier = [userActivity.userInfo objectForKey:CSSearchableItemActivityIdentifier];

  // 接受事先定义好的数值,如果是多个参数可以使用把json转成string传递过来,接受后把string在转换为json

  NSLog(@"传递过来的值%@", uniqueIdentifier);

  }

  return YES;

  }

  备注:

  复制代码 代码如下:

  #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000

  // 相关spotlight的方法等

  #endif

  // Spotlight支持iOS9以上设备运行,对与低版本的设备需加入这个防止崩溃问题

  以上就是关于iOS9中新API--Spotlight的使用详细解析了,更多相关内容请继续关注爱站技术频道。

上一篇:对于Objective-C中MKNetworkKit开发框架的解说

下一篇:iOS中UITabBarControlle的使用详细教程

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载