spotlight
是iOS 9新推出的功能,允许用户在系统中根据他们的设置搜索所有与关键词有关的东西。它的使用比较简单,下面说说它的使用和遇到的那些坑。
在使用时需要引入框架并导入头问价
<CoreSpotlight/CoreSpotlight.h>
<MobileCoreServices/MobileCoreServices.h>
(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<NSString *> *)identifiers completionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler
- 根据
domainIdentifiers
删除
- (void)deleteSearchableItemsWithDomainIdentifiers:(NSArray<NSString *> *)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
转载请注明出处。