2015-10-30 57 views
1

我想在應用程序中使用CoreSpotlight API,我有plist文件,其上有幾個項目,例如動物的名字。所以我需要設置title字符串等於這些對象的on,例如,如果用戶搜索Lion,線名和例如其功能出現在聚光燈下。這裏是我的代碼:在CSSararchableItemAttributeSet中設置標題屬性從NSarray

- (void)setupCoreSpotlightSearch 
{ 

    CSSearchableItemAttributeSet *attibuteSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(__bridge NSString *)kUTTypeImage]; 


    NSURL *url = [[NSBundle mainBundle] URLForResource:@"animals" withExtension:@"plist"]; 
    NSArray *playDictionariesArray = [[NSArray alloc ] initWithContentsOfURL:url]; 
    NSString *getNames = [NSString stringWithFormat:@"%@",playDictionariesArray]; 
    NSLog(@"%@",getNames) ; 


    attibuteSet.title =getNames; 
    attibuteSet.contentDescription = @"blah blah "; 


    CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier:@"app name" 
                   domainIdentifier:@"com.compont.appname" 
                    attributeSet:attibuteSet]; 
    if (item) { 
     [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item] completionHandler:^(NSError * _Nullable error) { 
      if (!error) { 
       NSLog(@"Search item indexed"); 
      } 
     }]; 
    } 
} 

問題是getNames返回所有的名字!我怎麼能過濾它當用戶搜索一個特定的單詞從animals.plist 謝謝。

EDIT [plist中圖片]: enter image description here

回答

1

可以維持的NSArray並通過playDictionariesArray迭代,創建&初始化CSSearchableItem對象與數據源的特定條目。

- (void)setupCoreSpotlightSearch 
{ 
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"animals" withExtension:@"plist"]; 
    NSArray *playDictionariesArray = [[NSArray alloc ] initWithContentsOfURL:url]; 
    NSMutableArray * searchableItems = [[NSMutableArray alloc]init]; 
    for(object in playDictionariesArray) 
    { 
     CSSearchableItemAttributeSet *attibuteSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(__bridge NSString *)kUTTypeImage]; 

     attibuteSet.title =[NSString stringWithFormat:@"%@",object]; //retrive title from object and add here 
     //attibuteSet.contentDescription = @"blah blah "; // retrieve description from object and add here 


     CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier:@"app name" 
                  domainIdentifier:@"com.compont.appname" 
                   attributeSet:attibuteSet]; 
     [searchableItems addObject:item]; 
    } 

    if (searchableItems) { 
     [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:searchableItems completionHandler:^(NSError * _Nullable error) { 
      if (!error) { 
       NSLog(@"Search item indexed"); 
      } 
     }]; 
    } 
} 

我還沒有運行和測試代碼。

+0

你爲什麼要移除'attibuteSet.title'?這是我的主要問題,必須有一個值 –

+0

playDictionariesArray將包含所有名稱的列表。所以你可以將title設置爲'attributeSet.title = object'。你可以檢查編輯。 –

+0

我將對象改爲'for(NSString * name in playDictionariesArray)'並設置 'attributeSet.title = name',但問題只是我的plist文件的最後一項是可搜索的,它是'鳥類'我有很多其他的動物! –

0

你沒有循環每個鍵。使用此問題中提供的代碼。

CoreSpotlight indexing

嘗試它支持分度的裝置上。 不是iPhone 4/4s或iPad。

+0

您的代碼不會調用'NSLog(@「搜索項索引」);'根本!它似乎沒有任何工作。我在'viewDidLoad'中稱其爲'self spotLightIndexing]' –

+0

在viewWillAppear上調用它...但是你應該做的是設置一個布爾運行一次。否則它會在每次啓動時運行。 –