2016-07-05 10 views
-1

コアデータエンティティからのデータをリストするテーブルビューを実装しました。私は、コアデータに格納されたデータの束(約6000 +レコード - 静的データ)を持っています。今私はNSFetchedResultsControllerでテーブルビュー内で検索を実装したいと思います。NSFetchedResultsControllerを使用してコアデータエンティティレコードを検索

私のDBの列(属性)には長い文字列(空白で区切られた文のようなもの)があります。私はその文の各単語のbeginwithを実装したいと思います - 私のアプリは単語の単語のいずれかが検索ワードで始まるならば、dbレコードをリストアップするべきです。

たとえば、ここに私のデータサンプルは、次のとおりです。

レコード1 - 私は「こんにちは」を検索すると今テストこんにちは

- こんにちはこんにちは レコード3 - こんにちはこんにちはこんにちはどのようにして レコード2ですRecord-1とRecord-2をリストする必要があります。

答えて

0

あなたは以下のコードを使用することができます

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name contains[cd] %@", searchText]; 
[[_fetchedResultsController fetchRequest] setPredicate:predicate]; 
[[_fetchedResultsController fetchRequest] setFetchLimit:50]; 

をそれとも、検索結果のコントローラを使用する場合

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString { 
    NSInteger searchOption = controller.searchBar.selectedScopeButtonIndex; 
    return [self searchDisplayController:controller shouldReloadTableForSearchString:searchString searchScope:searchOption]; 
} 

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption { 
    NSString* searchString = controller.searchBar.text; 
    return [self searchDisplayController:controller shouldReloadTableForSearchString:searchString searchScope:searchOption]; 
} 

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString*)searchString searchScope:(NSInteger)searchOption { 

    NSPredicate *predicate = nil; 
    if ([searchString length]) 
     if (searchOption == 0) // full text, in my implementation. Other scope button titles are "Author", "Title" 
      predicate = [NSPredicate predicateWithFormat:@"title contains[cd] %@ OR author contains[cd] %@", searchString, searchString]; 
     else 
      // docs say keys are case insensitive, but apparently not so. 
      predicate = [NSPredicate predicateWithFormat:@"%K contains[cd] %@", [[controller.searchBar.scopeButtonTitles objectAtIndex:searchOption] lowercaseString], searchString]; 

    [fetchedResultsController.fetchRequest setPredicate:predicate]; 

    NSError *error = nil; 

    if (![[self fetchedResultsController] performFetch:&error]) { 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    }   

    return YES; 
} 
関連する問題