iOS9 开发新特性 Spotlight使用(转)

原文:http://www.cnblogs.com/jgCho/archive/2015/11/13/4961435.html

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);
     }
}];

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

- (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以上设备运行,对与低版本的设备需加入这个防止崩溃问题
时间: 2024-11-29 07:05:54

iOS9 开发新特性 Spotlight使用(转)的相关文章

iOS开发——新特性OC篇&amp;IOS9 SDK新特性

iOS9 SDK新特性 WWDC 2015苹果开发者大会是移动开发者一年一度的盛会,InfoQ中文站除了第一时间整理Keynote内容分享给大家之外,还邀请了资深的一线开发者分享他们的收获.本文为王巍(@onevcat)对WWDC上透露的iOS 9 SDK新特性的总结,分享给广大的iOS开发者. 年年岁岁花相似,岁岁年年人不同.今年的 WWDC 一如既往的热闹,得益于 Apple 的随机抽选机制,这两年有更多的中国开发者有机会亲临现场进行体验,并与全球开发者取得更多的交流.更多的开发者可能只能在

iOS开发——新特性OC篇&amp;IOS9 系统新特性

IOS9 系统新特性 2015年6月89号凌晨召开的WWDC 2015苹果开发者大会发布了全新的iOS 9系统,PC6小编今天给大家整理了这次iOS9的系统更新带来了哪些新的功能与升级,本次新功能一览,我们分为iOS 9 for iPhone和iOS 9 for iPad两部分来介绍. 一.iOS 9 for iPhone 1.每周收到10亿条指令的Siri,在识别的速度和准确率上都提高了40%,Siri的功能也得到了丰富,可以用来查找图片.视频,也能让它提醒你看完网页上的文章. 2.为了体现智

转:iOS9的新特性以及适配方案

2015年9月8日,苹果宣布iOS 9操作系统的正式版在太平洋时间9月16日正式推出,北京时间9月17日凌晨1点推送. 新的iOS 9系统比iOS8更稳定,功能更全面,而且还更加开放.iOS 9加入了更多的新功能,包括更加智能的Siri,新加入的省电模式.iOS 9为开发者提供5000个全新的API.iOS9新的特性 这对于使用者来说固然是一个好消息,每一次版本更新带来的都是更多的便利和更全面的功能,接受新的系统固然会有一些不适应,新的系统也有可能会有一些缺陷,但是至少苹果在不断地更新,让我们体

iOS9的新特性以及适配方案-----转载

2015年9月8日,苹果宣布iOS 9操作系统的正式版在太平洋时间9月16日正式推出,北京时间9月17日凌晨1点推送. 新的iOS 9系统比iOS8更稳定,功能更全面,而且还更加开放.iOS 9加入了更多的新功能,包括更加智能的Siri,新加入的省电模式.iOS 9为开发者提供5000个全新的API.iOS9新的特性 这对于使用者来说固然是一个好消息,每一次版本更新带来的都是更多的便利和更全面的功能,接受新的系统固然会有一些不适应,新的系统也有可能会有一些缺陷,但是至少苹果在不断地更新,让我们体

iOS9中开发新特性

iOS9开发中版本的新特性 1. 默认支持https 2. http 需要在plist文件中单独配置,才能在程序中使用http 在Info.plist 中添加 NSAppTransportSecurity类型 Dictionary. 在NSAppTransportSecurity 中添加 NSAllowsArbitraryLoads类型Boolean,值设置为YES. 3. iPad 中可以实现分屏功能. 4. 3D Touch 5. AppThinning,可以给安装包瘦身 如果有不足的地方,

iOS9 collectionView新特性

近日因为系统升级导致xcode6.系列版本出现bug,于是开始使用xcode7.在使用之余突然想到collectionView在iOS9中发布了一个可以移动cell的新特性,就尝试着将其实现,无奈api文档接口无法查看,只有一些列的api放在那里.于是上网查找,发现国内没有搜索到此类文章,于是FQ继续找,最终找到的竟然都是swift版本,于是将其转换为oc版本以帮助国内需要的朋友学习使用.下面是具体用法: 1.创建collectionView并设置代理 - (UICollectionView *

iOS9的新特性以及适配方案

1. 限制HTTP协议,全部改用更安全的HTTPS iOS9让所有的HTTP默认使用了HTTPS,原来的HTTP协议传输都改成TLS1.2协议进行传输.直接造成的情况就是App发请求的时候弹出网络无法连接.对于这个问题的解决方案,网上有一篇博客已经总结的很好了,我在这就简要的说明怎么处理这种问题. HTTPS和HTTP的区别在于哪里呢? 举个简单的栗子:原来的 HTTP 是塑料水管,容易被戳破:那么如今新设计的 HTTPS 就像是在原有的塑料水管之外, 再包一层金属水管.一来,原有的塑料水管照样

iOS开发——新特性OC篇&amp;Objective新特性

Objective新特性 Overview 自 WWDC 2015 推出和开源 Swift 2.0 后,大家对 Swift 的热情又一次高涨起来,在羡慕创业公司的朋友们大谈 Swift 新特性的同时,也有很多像我一样工作上依然需要坚守着 Objective-C 语言的开发者们.今年的 WWDC 中介绍了几个 Objective-C 语言的新特性,还是在“与 Swift 协同工作”这种 Topic 里讲的,越发凸显这门语言的边缘化了,不过有新特性还是极好的,接下来,本文将介绍下面三个主要的新特性:

iOS开发——新特性OC篇&amp;Swift 2.0新特性

Swift 2.0新特性 转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度的WWDC大会如期而至,在大会上Apple发布了Swift 2.0,引入了很多新的特性,以帮助开发者能更快,更简单的构建应用.我在这里也说道说道Swift 2.0中值得大家注意的新特性. guard语句 guard语句和if语句有点类似,都是根据其关键字之后的表达式的布尔值决定下一步执行什么.但与if语句不