[程序员日记]iOS spotlight与进入程序的几种方法

spotlight是iOS 9新推出的功能,允许用户在系统中根据他们的设置搜索所有与关键词有关的东西。它的使用比较简单,下面说说它的使用和遇到的那些坑。

[程序员日记]iOS spotlight与进入程序的几种方法_第1张图片
spotlight效果展示

在使用时需要引入框架并导入头问价

 
 

(1)创建spotlight,主要分为三步

  • 1)为每一个数据设置数据(CSSearchableItemAttributeSet)

  • 2)实例化一个可搜索对象(CSSearchableItem)。

  • 3)将所有对象放入到一个数组中。

    NSMutableArray *searchItems = [NSMutableArray array];
    
    CSSearchableItemAttributeSet *attributeSet = [[CSSearchableItemAttributeSet alloc]initWithItemContentType:(NSString *)kUTTypeImage];
              
    // 标题
    attributeSet.title = actionGroup.name;
    //关键字
    attributeSet.keywords = @[@"大招",@"运动"];
    // 描述
    attributeSet.contentDescription = actionGroup.notes;
    // 图标, NSData格式
    attributeSet.thumbnailData = [NSData dataWithContentsOfURL:[NSURL URLWithString:actionGroup.actionGroupImage.actionGroupImg]];
              
    CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier:@"actionGroud"  domainIdentifier:@"dongci" attributeSet:attributeSet];
              
    [searchItems addObject:item];
    
    [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:searchItems completionHandler:^(NSError * error) {
              
    }];
    

(2)删除,三种删除方法

  • 根据Identifiers删除
- (void)deleteSearchableItemsWithIdentifiers:(NSArray *)identifiers completionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler
  • 根据domainIdentifiers删除
- (void)deleteSearchableItemsWithDomainIdentifiers:(NSArray *)domainIdentifiers completionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler
  • 删除全部
- (void)deleteAllSearchableItemsWithCompletionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler

(3)通过spotlight唤起应用程序需要在Appdelegate中调用相应的方法。

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

可以通过userActivity.userInfo[@"kCSSearchableItemActivityIdentifier"]判断点击内容。

至此,启动一个应用不再只是点击应用进入,那我们来看看启动应用的其他几种方法。

  • 1)推送通知(notification)

通过点击推送通知内容进入程序

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler
  • 2)3D Touch

3D Touch是6s/6s plus以及以后苹果设备特有的功能,设置shortcutItem设置菜单,通过其进入相应内容

- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler

可以通过shortcutItem.type确定选择哪一条

  • 3)spotlight

  • 4)应用白名单,通过其他应用唤起,如使用分享时打开第三方分享应用。

(4)注意
在创建和删除spotlight时,系统会自动分配一个子线程,因此无需再次分配线程。若要显示相关的UI(如alert),需要performSelectorOnMainThread

补充
在使用spotlight时还是会遇到性能的问题。比如我的程序是在数据请求回来时将数据存入spotlight,也要现实在UI线程中。当知道spotlight会再次分配线程时便没有再分配,导致很卡。因此在使用时还是单独创建一个异步线程管理这一块吧。

谢谢查看,欢迎补充!

文章优先发表于:http://keyliu.com
转载请注明出处。

你可能感兴趣的:([程序员日记]iOS spotlight与进入程序的几种方法)