2011-12-09 2 views
3

Apple의 TableSearch 예제 코드를보고있었습니다. 그것들은 모든 내용을위한 NSArray와 필터링 된 내용을위한 NSMutableArray를 가지고있는 것처럼 보입니다. 필터가 켜져 있으면 NSMutableArray가 표시됩니다. 해제되어 있으면 모든 데이터가있는 NSArray가 표시됩니다.UITableView 필터링 내용

1) 필자는 전에 필터링을 많이 해본 적이 없으므로 필터가 일반적인 구현인지 궁금합니다.

2)이 질문에 추가하려면 4 개의 다른 범주로 구성된 필터가있는 경우 필터가 켜져있을 때 필터링 된 내용을 표시하는 NSMutableArray를 하나만 사용합니까? 또는 각기 다른 유형의 필터에 대해 네 가지 NSMutableArrays를 만든 다음, 어떤 필터가 켜져 있는지에 따라 그 목록을 표시합니다.

일반적인 구현은 목록에 NSArray가 있다고 가정하면 네 개의 다른 NSMutableArrays를 수행 할 경우 앞에서 필터링 된 목록의 배열을 만드는 것이 비용이 많이 들고 혼란스러워집니다. 그들이 선택한 필터 옵션의 사용자, 즉시 NSMutableArray를 작성한 다음 다시로드해야합니다. [tableView reloadData];

고마워.

답변

2

나에게 샘플 앱이 없지만 일반적으로 조건자를 사용하여 필터링하므로 docs on NSPredicate을 검토하는 것이 좋습니다.

따라서 필터를 변경하려면 조건자를 변경해야합니다. 필터링 된 결과를 모두 만들 필요는 없습니다. 주어진 순간에만 필요한 것을 만들 수 있습니다.

배열을 사용하면 shown in this example과 같은 코드를 사용하여 필터링 할 수 있습니다. 키 라인은

NSPredicate *predicate; 
predicate = [NSPredicate predicateWithFormat:@"length == 9"]; 
NSArray *myArray2 = [myArray filteredArrayUsingPredicate:predicate]; 

입니다. 필터링이 항상 배열로 수행되는 것은 아닙니다. 핵심 데이터를 사용하는 경우 NSFetchedResultsControllers으로 수행 할 수 있습니다. 술어도 거기에서 매우 많이 사용됩니다. 술어는 정규 표현식 필터링을 포함하여 다른 것들에도 사용될 수 있습니다. 당신이 그것에 익숙하지 않다면, 볼만한 가치가 있습니다.

1

정말 다릅니다. 기본 데이터가 Core Data에있는 경우 NSFetchedResultsController을 사용하고 NSPredicate을 지정하십시오. 데이터 배열이있는 경우이를 순회하여 다른 데이터 배열을 만드는 것이 가장 쉽습니다.

일반적으로 필터 자체는 전체 드로잉 프로세스 (표 셀의 인스턴스화 또는 재활용 포함)만큼 비싸지 않습니다. 인스 트루먼 테이션을 통해 쉽고 재미있는 일을 할 수 있습니다.

4 개의 다른 배열을 유지하는 것은 일반적으로 부족한 리소스 인 메모리 측면에서 좋은 아이디어가 아닙니다.

비록 상관없이 reloadData가 관련 될 것입니다. (OS 버전에 따라 다를 수 있습니다. NSFetchedResultsController 문서 참조)