iOS 9 Core Spotlight搜索实例代码

前言

  感觉 Spotlight 这个功能还是蛮有用的,能提升用户活跃,增加应用内容曝光几率。

正文

  一、实现(iOS 9.0)

    1.1  添加索引

 var searchableItems = [CSSearchableItem]()
              for app in apps {
                let searchableItemAttributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeText as String)
                searchableItemAttributeSet.title = app.label
                searchableItemAttributeSet.contentDescription = "Watch \(app.label) LIVE on Shou"
                let searchableItem = CSSearchableItem(uniqueIdentifier: app.id, domainIdentifier: "youappbundlerid.apps", attributeSet: searchableItemAttributeSet)

                searchableItems.append(searchableItem)
              }

              CSSearchableIndex.defaultSearchableIndex().indexSearchableItems(searchableItems, completionHandler: { (error: NSError?) in
                if error == nil {
                  print("initSpotlight...completed")
                } else {
                  print("\(error)")
                }
              })

一定要注意把上面代码加到子线程里面执行,略慢。可以在 AppDelegate 里面从服务器请求完数据再加索引的。

    1.2  接收点击事件

 @available(iOS 8.0, *)
  func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {
    if #available(iOS 9.0, *) {
      if userActivity.activityType == CSSearchableItemActionType {
        if let uniqueIdentifier = userActivity.userInfo?[CSSearchableItemActivityIdentifier] as? String, let label = userActivity.title {
          // 页面跳转
        }
      }
    }
    return true
  }

二、额外经验

    2.1  CSSearchableItemAttributeSet

    可以不设置 thumbnailData ,这样默认就是当前应用的 LOGO;另外注意 thumbnailURL 并不是用来指定网络图片地址的 - - #,所以你要加缩略图的话需要先把网上的下载到本地再设置

    2.2  CSSearchableItem

    默认失效是一个月,另外发现无法携带更多数据(比如通过 CSSearchableItemAttributeSet 的 setValue ,在 userActivity 那边都接收不到)

    2.3  没有找到索引条数的限制

    http://stackoverflow.com/questions/35284223/is-there-a-limit-for-number-of-items-cssearchableitem-in-core-spotlight-cssear

    我发现添加索引还是挺慢的,另外那个批量索引没弄懂,感觉应该是又有删除又有新增的话适合批量处理。

    2.4  没用找到重新索引的方法

    重复调用也没用问题,只要 uniqueIdentifier 匹配会覆盖老的数据

    2.5  没有找到提升排名的方法

    好像系统会有一套算法来自动提升排名。

总结:以上就是 IOS 开发 Core Spotlight 实例应用,以及经验分享,希望能帮助开发IOS的同学。

(0)

相关推荐

  • iOS App开发中UISearchBar搜索栏组件的基本用法整理

    基本属性 复制代码 代码如下: @UISearchBar search = [[UISearchBar alloc]initWithFrame:CGRectMake(0,44,320,120)]; pragma mark -基本设置 复制代码 代码如下: //控件的样式 默认--0白色,1是黑色风格 /* UIBarStyleDefault          = 0, UIBarStyleBlack            = 1, search.barStyle =UIBarStyleDefau

  • IOS开发代码分享之设置UISearchBar的背景颜色

    今天用到UISearchBar,之前网上提供的方法已经不能有效的去除掉它的背景色了,修改背景色方法如下: mySearchBar.backgroundColor = RGBACOLOR(249,249,249,1);     mySearchBar.backgroundImage = [self imageWithColor:[UIColor clearColor] size:mySearchBar.bounds.size];   //取消searchbar背景色 - (UIImage *)im

  • iOS中的UISearchBar搜索框组件基础使用指南

    UISearchBar也是iOS开发常用控件之一,点进去看看里面的属性barStyle.text.placeholder等等.但是这些属性显然不足矣满足我们的开发需求.比如:修改placeholder的颜色.修改UISearchBar上面的UITextfield的背景颜色.修改UITextfield上面的照片等等. 为了实现上述的需求,最好写一个UISearchBar的子类就叫LSSearchBar吧 LSSearchBar.h如下: 复制代码 代码如下: #import <UIKit/UIKi

  • IOS改变UISearchBar中搜索框的高度

    一.系统的searchBar 1.UISearchBar的中子控件及其布局 UIView(直接子控件) frame 等于 searchBar的bounds,view的子控件及其布局 UISearchBarBackground(间接子控件) frame 等于searchBar的bounds UISearchBarTextField(间接子控件) frame.origin等于(8.0, 6.0),即不等于searchBar的bounds 2.改变searchBar的frame只会影响其中搜索框的宽度

  • iOS开发之UITableView与UISearchController实现搜索及上拉加载,下拉刷新实例代码

    废话不多说了,直接给大家贴代码了. 具体代码如下所示: #import "ViewController.h" #import "TuanGouModel.h" #import "TuanGouTableViewCell.h" #define kDeviceWidth [UIScreen mainScreen].bounds.size.width #define kDeviceHeight [UIScreen mainScreen].bounds.

  • 如何实现IOS_SearchBar搜索栏及关键字高亮

    搜索框的效果演示: 这个就是所谓的搜索框了,那么接下来我们看看如何使用代码来实现这个功能. 我所使用的数据是英雄联盟的英雄名单,是一个JSON数据的txt文件, JSON数据的处理代码如下所示: //获取文件的路径path NSString *path = [[NSBundle mainBundle] pathForResource:@"heros" ofType:@"txt"]; //将路径下的文件转换成NSData数据 NSData *data = [NSDat

  • iOS实现图片保存与搜索功能

    本文实现Photos.framework的常见功能,包括:创建自定义相册.保存图片到自定义相册.搜索所有相册的图片,具体内容如下 1.保存图片到相册 /** * 保存图片到相册 */ - (IBAction)saveImage { PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus]; if (status == PHAuthorizationStatusDenied) { NSLog(@"请到[设置-隐私-照片]

  • iOS 9 Core Spotlight搜索实例代码

    前言 感觉 Spotlight 这个功能还是蛮有用的,能提升用户活跃,增加应用内容曝光几率. 正文 一.实现(iOS 9.0) 1.1 添加索引 var searchableItems = [CSSearchableItem]() for app in apps { let searchableItemAttributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeText as String) searchableItem

  • ios中getTime()的兼容性实例代码

    时间格式为:2017-12-12 12:00:00在苹果上获取时间戳有兼容性问题 需要转换成2017/12/12 12:00:00 才可以正确获取到时间戳 let u = navigator.userAgent; //判断浏览器型号 let isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端 let isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X

  • IOS中各种手势操作实例代码

    先看下效果 手势相关的介绍 IOS中手势操作一般是 UIGestureRecognizer 类的几个手势子类去实现,一般我们用到的手势就这么5种: 1.点击  UITapGestureRecognizer 2.平移  UIPanGestureRecognizer 3.缩放  UIPinchGestureRecognizer 4.旋转  UIRotationGestureRecognizer 5.轻扫  UISwipeGestureRecognizer 我们上面这个实例中就用到了上面这5种手势,不

  • iOS 增加右侧按钮功能实例代码

    一,工程图. 二,代码. ViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //增加右侧按钮 [self addRightButton]; } #pragma -mark -functions //增加右侧按钮 -(void)addRightButton { UIBarButtonI

  • iOS清除所有缓存的实例代码

    本文介绍了iOS清除所有缓存的实例代码,分享给大家,具体如下: 计算缓存 NSString *libPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)[0]; CGFloat fileSize=[self folderSizeAtPath:libPath]; - (float ) folderSizeAtPath:(NSString*) folderPath{ NSFileMa

  • iOS 请求权限封装类的实例代码

    直接上代码 #import <Foundation/Foundation.h> #import <AVFoundation/AVFoundation.h> #import <AssetsLibrary/AssetsLibrary.h> #import <Photos/Photos.h> #import <CoreLocation/CoreLocation.h> @interface PermissionUtil : NSObject +(Bool

  • jquery select插件异步实时搜索实例代码

    一.先看看效果. 二.做此插件的原因. 1.数据量过大(几千.几万条),无法一次性全部加载. 2.现有插件各不相同,无法满足功能需求. 3.美观性,可控性不足. 三.如何使用. 1.html和js <select id="unit"></select> <script type="text/javascript" src="/demo/thirdparty/jquery/jquery-1.8.3.min.js">

  • iOS自定义UIScrollView的滚动条实例代码

    UIScrollView有自己默认的滚动条,可设置隐藏和显示,但是有时候这个默认的滚动条没办法满足我们的需求,那这时候只能通过自定义来实现了. 实现自定义滚动条需要解决的主要问题是: 在scrollview滚动的过程中如何改变滚动条的位置,进而确保滚动条和scrollView在相同时间内走完自己的位移,只要把这个问题解决好了,那我们就可以优雅的自定义滚动条了. 那如何解决这个滚动条的当前滚动位移呢?我们知道,UIScrollView有一个滚动范围,滚动条也有一个滚动范围,也就是说两者的最大的滚动

  • iOS开发第三方键盘处理实例代码

    最近项目中遇到了键盘处理通知被调用多次的情况,废了好半天时间才找到解决办法,今天就给小伙伴儿们唠唠第三方键盘处理的那些坑! 详情请看:『https://github.com/boai/BAKeyboardDemo』 ! 1.聊天评论框的封装 先聊聊我项目中遇到的奇葩情况吧,一个直播界面,上面播放器,下面是分段控制器5个button,5个界面,其中三个界面最下面都是评论框,所以就封装了一个评论框公用. 但是本来用的『IQKeyboardManager』,开源键盘处理框架,可是在同一个界面有多个评论

  • iOS实现自定义表单实例代码

    前言 最近在开发一个APP,需要让用户填写数据,然后上传到服务端进行计算并返回结果在客户端中展示.其中需要填写的数据项多达十几项,大部分是必填.所有表单数据在一个页面中实现,在APP中这样的设计其实挺逆天的,但产品经理坚持要这么弄,也只能硬着头皮写.页面的表单数据样式五花八门,下图是其中几行截图 第一.二行的 textfield 其实是一个选择框,只能从下拉选项中选择一个.第三个只允许输入数字. 页面由另一个同学实现,表单的数据基本都在 cellForRowAtIndexPath 实现,结果是这

随机推荐