1. 功能:系统搜索可以搜索到app内的东西
对象名 | 描述 | 类型 |
---|---|---|
CSSearchableIndex | 用来插入条目的对象 | 对象 |
CSSearchableItem | 要插入的对象 | 对象 |
CSSearchableItemAttributeSet | 要插入的对象的属性描述 | 对象 |
identifier | 插入的标识符,这个在处理的时候可以拿到,然后根据它来处理点击事件 | 字符串 |
2. 引入头文件
#import <CoreSpotlight/CoreSpotlight.h>
3. 创建插入的条目###
CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier:identifier domainIdentifier:@"bundleID" attributeSet:attributeSet];
4. 进行插入和删除操作
插入 多个.一个的话数组里就写一个
[[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item]
completionHandler:^(NSError * __nullable error) {
if (error) {
NSLog(@"%@",error.localizedDescription);
}
}];
删除一个或者多个,根据identity来删除
//存的是id
NSArray * itemsIdentiferArray = @[];
for (NSString * identifty in itemsIdentiferArray) {
if ([identifty isKindOfClass:[NSString class]]) {
[[CSSearchableIndex defaultSearchableIndex] deleteSearchableItemsWithIdentifiers:@[identifty] completionHandler:^(NSError * __nullable error) {
if (!error)
NSLog(@"%@",error.localizedDescription);
}];
}
}
5. 点击事件的处理
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler
{
NSString *idetifier = userActivity.userInfo[@"kCSSearchableItemActivityIdentifier"];
//拿到id做页面跳转
}
6. 规律
- 相同id的条目会覆盖,不会有多个
- 图片最好用本地的图片,比如App logo
- 图片传的是data,如果是网络的,可以使用缓存,或者异步下载
- 建议封装一个单例,然后把id都存在一个数组里,并进行数据持久化
由于这个单例的耦合性比较大,对接了项目的数据模型,就不放demo了,放了也不好用