iOS9開(kāi)放的新API--Spotlight使用指南
1.Spotloight是什么?
Spotlight在iOS9上做了一些新的改進(jìn), 也就是開(kāi)放了一些新的API, 通過(guò)Core Spotlight Framework你可以在你的app中集成Spotlight。集成Spotlight的App可以在Spotlight中搜索App的內(nèi)容,并且通過(guò)內(nèi)容打開(kāi)相關(guān)頁(yè)面。
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以下設(shè)備運(yùn)行崩潰的問(wèn)題
b.創(chuàng)建CSSearchableItemAttributeSet 對(duì)象
CSSearchableItemAttributeSet *attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeImage];
attributeSet.title = spotlightTitle; // 標(biāo)題
attributeSet.keywords = keywords; // 關(guān)鍵字,NSArray格式
attributeSet.contentDescription = spotlightDesc; // 描述
attributeSet.thumbnailData = photo; // 圖標(biāo), NSData格式
// 把圖片轉(zhuǎn)換成NSData的方法
UIImagePNGRepresentation([UIImage imageNamed:@"xxx.png"]
c.創(chuàng)建可檢索條目CSSearchableItem
// spotlightInfo 可以作為一些數(shù)據(jù)傳遞給接受的地方
// domainId id,通過(guò)這個(gè)id來(lái)判斷是哪個(gè)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; // 標(biāo)題
attributeSet.keywords = keywords; // 關(guān)鍵字,NSArray格式
attributeSet.contentDescription = spotlightDesc; // 描述
attributeSet.thumbnailData = photo; // 圖標(biāo), NSData格式
// spotlightInfo 可以作為一些數(shù)據(jù)傳遞給接受的地方
// domainId id,通過(guò)這個(gè)id來(lái)判斷是哪個(gè)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);
}
}];
}
========加載本地圖片的使用方法========
========加載網(wǎng)絡(luò)圖片的使用方法========
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@" [self insertSearchableItem:data spotlightTitle:@"等風(fēng)來(lái)" description:@"等風(fēng)來(lái)描述" keywords:@[@"鮑鯨鯨",@"大麗花"] spotlightInfo:@"傳遞過(guò)去的值" 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);
}
}];
========點(diǎn)擊spotlight后的響應(yīng)方法========
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler {
if ([[userActivity activityType] isEqualToString:CSSearchableItemActionType]) {
NSString *uniqueIdentifier = [userActivity.userInfo objectForKey:CSSearchableItemActivityIdentifier];
// 接受事先定義好的數(shù)值,如果是多個(gè)參數(shù)可以使用把json轉(zhuǎn)成string傳遞過(guò)來(lái),接受后把string在轉(zhuǎn)換為json
NSLog(@"傳遞過(guò)來(lái)的值%@", uniqueIdentifier);
}
return YES;
}
備注:
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000
// 相關(guān)spotlight的方法等
#endif
// Spotlight支持iOS9以上設(shè)備運(yùn)行,對(duì)與低版本的設(shè)備需加入這個(gè)防止崩潰問(wèn)題
- iOS內(nèi)存錯(cuò)誤EXC_BAD_ACCESS的解決方法
- iOS開(kāi)發(fā)中ViewController的頁(yè)面跳轉(zhuǎn)和彈出模態(tài)
- IOS開(kāi)發(fā)代碼分享之設(shè)置UISearchBar的背景顏色
- iOS開(kāi)發(fā)之路--仿網(wǎng)易抽屜效果
- IOS開(kāi)發(fā)代碼分享之用nstimer實(shí)現(xiàn)倒計(jì)時(shí)功能
- iOS開(kāi)發(fā)中WebView的基本使用方法簡(jiǎn)介
- iOS中使用schema協(xié)議調(diào)用APP和使用iframe打開(kāi)APP的例子
- iOS 9 Core Spotlight搜索實(shí)例代碼
相關(guān)文章
IOS開(kāi)發(fā)中禁止NavigationController的向右滑動(dòng)返回
這篇文章主要介紹了IOS開(kāi)發(fā)中禁止NavigationController的向右滑動(dòng)返回的相關(guān)資料,需要的朋友可以參考下2017-03-03
iOS實(shí)現(xiàn)攝像頭實(shí)時(shí)采集圖像
這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)攝像頭實(shí)時(shí)采集圖像,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04
iOS開(kāi)發(fā)存儲(chǔ)應(yīng)用程序Info.plist知識(shí)全面詳解
這篇文章主要為大家介紹了iOS開(kāi)發(fā)存儲(chǔ)應(yīng)用程序Info.plist知識(shí)全面詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
詳解iOS平臺(tái)調(diào)用后臺(tái)接口的正確姿勢(shì)
這篇文章主要介紹了詳解iOS平臺(tái)調(diào)用后臺(tái)接口的正確姿勢(shì),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
IOS提醒用戶(hù)重新授權(quán)打開(kāi)定位功能
這篇文章主要介紹了IOS提醒用戶(hù)重新授權(quán)打開(kāi)定位功能的相關(guān)資料,需要的朋友可以參考下2015-12-12
詳解 iOS 系統(tǒng)中的視圖動(dòng)畫(huà)
這篇文章主要介紹了iOS 系統(tǒng)中的視圖動(dòng)畫(huà)的的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用ios開(kāi)發(fā),感興趣的朋友可以了解下2021-02-02
swift3.0網(wǎng)絡(luò)圖片緩存原理簡(jiǎn)析
這篇文章主要為大家簡(jiǎn)析了swift3.0網(wǎng)絡(luò)圖片緩存原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09

