iOS9 開發新特性 Spotlight使用

   

1.Spotloight是什麼?json

  Spotlight在iOS9上作了一些新的改進, 也就是開放了一些新的API, 經過Core Spotlight Framework你能夠在你的app中集成Spotlight。集成Spotlight的App能夠在Spotlight中搜索App的內容,而且經過內容打開相關頁面。網絡

  Demo演示app

  

 

2.如何集成Spotlight框架

  a.添加所須要的框架 dom

#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如下設備運行崩潰的問題async

  b.建立 CSSearchableItemAttributeSet 對象spa

複製代碼
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.建立可檢索條目CSSearchableItemrest

// spotlightInfo 能夠做爲一些數據傳遞給接受的地方
// domainId      id,經過這個id來判斷是哪一個spotlight
CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier:spotlightInfo domainIdentifier:domainId attributeSet:attributeSet];

  d.添加檢索入口code

[[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以上設備運行,對與低版本的設備需加入這個防止崩潰問題
相關文章
相關標籤/搜索