iOS9开放的新API--Spotlight使用指南

2016-02-19 10:41 20 1 收藏

今天天气好晴朗处处好风光,好天气好开始,图老师又来和大家分享啦。下面给大家推荐iOS9开放的新API--Spotlight使用指南,希望大家看完后也有个好心情,快快行动吧!

【 tulaoshi.com - 编程语言 】

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 CoreSpotlight/CoreSpotlight.h
#import MobileCoreServices/MobileCoreServices.h
#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);
     }
}];

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

代码如下:

- (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"];

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

代码如下:
 
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以上设备运行,对与低版本的设备需加入这个防止崩溃问题

来源:http://www.tulaoshi.com/n/20160219/1595480.html

延伸阅读
ios9什么时候出?   苹果今天宣布, 将于6月8日至6月12日在旧金山Moscone West召开第26届年度全球开发者大会(WWDC)。 在本次大会上,苹果应该会公布iOS和OS X的最新研发进度。此外,这次大会上还会有100多场由1000多名Apple工程师主讲的技术活动。 和此前一样,这次大会的门票依然要靠抽签的方式进行发放。 自今日起至太平洋tul...
ios9什么时候更新   昨天媒体援引苹果客服的回答,认为 iOS9 正式版将在北京时间 9 月 16 日凌晨发布,结果等了半夜的果粉还是失望了,苹果并没有发布任何更新,看来苹果客服也不靠谱,iOS9 的正式版还需要再等。 苹果此前在 iPhone6S 的发布会上表示 iOS9 将在 9 月 16 日开放下载,从现在的情况来看,依然会依照美国时间...
ios9有哪些新功能?   亮点一:地图增加公交换乘 苹果自带的地图由于国内功能缺失不少,一直可用性并不高,这次终于有点实用的公交换乘功能了。新版地图加入了公共交通导航服务,包括公交、地铁、火车等交通工具,火车站及地铁等出入口都有详细标注。 亮点二:ipad分屏多任务 slide over功能可以让用户在两个应...
ios9返回键怎么调出?   ios9返回键怎么调出?ios9系统返回键在哪里设置方法 首先图老师小编在这里要解释一下,ios9的返回键并不是时刻存在iphone左上角的,返回键是指从一个程序蹦到另一个程序时给你返回防止误操作的。 ios9返回键要设置吗? 不需要!在某个应用跳转至另一个应用后,在新应用界面中左上角的信号...
ios9省电模式在哪里   省电模式是一个ios9的一个新功能,透过限制或禁止某些功能,以延长iPhone的电池寿命。 另外,手机的一些感测器、推播通知和后台程式重新整理会被关闭。此外,当手机进入睡眠状态,亮度也会变暗,处理器和网路速度也会降低。 ios9怎么设置省电模式?很简单,只要用户的iPhone的电池水平达到20%,ios9...

经验教程

604

收藏

26
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部