사용자 검색을 한 다음 이름, 전화 번호, URL, 이메일 주소 등의 주소록 데이터에 대해 해당 검색어를 검색하고 싶습니다. 내 솔루션이 잘 작동하지만 느립니다. 주소록 데이터가 큰 경우 앱이 작동하지 않습니다. 주소록 데이터가 큰 경우에도 응용 프로그램이 멈추지 않도록 검색을 어떻게 최적화 할 수 있습니까?아이폰의 주소록에서 검색 결과 최적화
여기에 내 코드
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
[self takeSomeActionWhenTextChange];
}
-(void)takeSomeActionWhenTextChange{
[contactArray removeAllObjects];
NSString *searchText=[[textSearchBar text] lowercaseString];
for (int index=0; index<count; index++) {
ABRecordRef record=CFArrayGetValueAtIndex(people, index);
//[self checkStringISAddress:searchText withRecord:record];
if ([self checkStringIsFirstName:searchText withRecord:record]==YES
|| [self checkStringIsLastName:searchText withRecord:record] == YES
||[self checkStringIsNote:searchText withRecord:record]==YES
|| [self checkStringIsAddress:searchText withRecord:record]==YES
|| [self checkStringIsCompany:searchText withRecord:record]==YES
||[self checkStringIsEmail:searchText withRecord:record]
||[self checkStringIsPhonenumber:searchText withRecord:record]==YES)
{
NSLog(@"object added inside Array");
[contactArray addObject:record];
[contactTableView reloadData];
}else{
NSLog(@"No Match For this object");
[contactTableView reloadData];
}
}
}
검색 쿼리 문자열은 이름, 성, 등등 이메일 &와 일치하는 경우 내가 확인합니다입니다. 위의 메소드에는 하위 문자열이 있는지 여부를 확인하는 논리가 포함되어 있습니까? ti가 일치하면 배열에 추가합니다.
내가 페르 탐 검색에 스레드 또는 GCD를 사용해야합니까? 그렇다면 어떻게됩니까? 테이블 뷰를 업데이트하려면 어떻게해야합니까?
답장을 보내 주셔서 감사합니다. 수동 검사 대신에 NSPredciate를 사용해야합니까? 그렇다면 어떻게 술어를 사용할 수 있습니까? – iOSAppDev
"NSPredicate"에 대한 SO 검색은 많은 예제를 제공합니다. 문서는 https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSPredicate_Class/Reference/NSPredicate.html –
링크를 제공해 주셔서 감사합니다. 나는이 문서를 보았다. 하지만 내 문제는 어떻게 이름, 성, 주소, 메모, 이메일, ph no 등 모든 속성에 대해 내 검색어를 검색하기 위해 술어를 사용할 수 있습니까? 재산 당 하나의 술어를 사용해야합니까 아니면 다른 방법이 있습니까? 왜냐하면 내가 위에서 언급 한 모든 성분을 찾아야하기 때문이다. – iOSAppDev