2011-12-23 4 views
0
내가 아이폰 응용 프로그램에서 모바일 지역 검색을 구현하고

:아이폰 모바일 지역 검색 최적화

- (void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)searchText { 

     //Remove all objects first. 
     [copyListOfItems removeAllObjects]; 

     if([searchText length] > 0) { 

      [ovController.view removeFromSuperview]; 
      searching = YES; 
      letUserSelectRow = YES; 
      self.tableView.scrollEnabled = YES; 
      [self searchTableView]; 
     } 
     else { 

      [self.tableView insertSubview:ovController.view aboveSubview:self.parentViewController.view]; 

      searching = NO; 
      letUserSelectRow = NO; 
      self.tableView.scrollEnabled = NO; 
     } 

     [self.tableView reloadData]; 
    } 



    - (void) searchTableView { 

     NSString *searchText = searchBar.text; 
     NSMutableArray *searchArray = [[NSMutableArray alloc] init]; 

     for (NSDictionary *dictionary in listOfItems) 
     { 
      NSArray *array = [dictionary objectForKey:@"key_pdescription"]; 
      [searchArray addObjectsFromArray:array]; 
     } 

//in requirement searchArray has more than 50k objects 
     for (NSString *sTemp in searchArray) 
     { 
      NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch]; 

      if (titleResultsRange.length > 0) 
       [copyListOfItems addObject:sTemp]; 
     } 

     [searchArray release]; 
     searchArray = nil; 
    } 
, 즉 검색 그것은 기록의 수백 잘 작동,하지만 난 그 50 개 수천 이상 구현해야

입니다 을 1 문자를 입력 한 후 매우 느립니다. 다음 문자를 입력 할 때까지 기다려야합니다. 누군가가 모바일 로컬 검색을 위해 최적화 된 알고리즘을 구현 한 경우 진행 방법을 안내해주세요.

+1

이 링크를 통해서도 이동하십시오. http://stackoverflow.com/questions/3067543/core-data-and-paging – User97693321

답변

0

코어 데이터를 사용하고 가져온 결과를 제한하고 검색 결과 화면에 데이터를 채울 수 있으며 다음 레코드 집합에 대한 페이지 매김을 구현할 수 있습니다.

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
//[request setEntity:entity]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"predicateformart"]; 
[request setPredicate:predicate]; 
[request setFetchLimit:100];//100 records for example 
0

문제는 searchTableView 메소드에 있습니다.
첫째, 검색 할 때마다 searchArray를 만들지 말고, 더 나은 선택은 viewDidLoad에서 빌드하는 것입니다.
둘째 : 대신 비교 설명서의

[NSArray filteredArrayUsingPredicate:(NSPredicate *)predicate] 

를 사용합니다.