2010-04-23 2 views
1

기본 Core Data SQLite 저장소의 이름 목록을 표시하는 NSFetchedResultsController 데이터 소스가있는 tableview가 있습니다. 나는 검색 창을 구현했다. 첫 문자의 검색 창에 입력되는 경우, 다음과 같은 형식의 요청을 실행 페치 : 제 검색 문자가 입력 될 때NSFetchedResultsController 및 핵심 데이터를 사용하여 텍스트 검색 최적화

NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"name beginswith[cd] %@", searchText]; 

단, I는 fetchedResultsController의 페치 개체를 필터링하고 싶다 위의 1과 비슷한 또 다른 가져 오기 요청을 구현하면 다른 가져 오기 요청을 실행하는 대신 두 번째 가져 오기 결과가 첫 번째 하위 집합이 될 것이라고 기대했던 저장소로 다시 이동합니다. 어쨌든 fetchedResultsController를 필터링하여 상점으로의 다른 여행을 피할 수 있습니까?

+0

답변을 찾으셨습니까? 주어진 응답은 fetchedResultsController를 사용할 때 발생하는 핵심 데이터 최적화를 고려하지 않는 것 같습니다. 아마도 fetchedResultsController가 여전히 최선의 방법이지만 모든 객체를 무효화하지 않고 fetchRequest를 수정하는 방법에 대한 예가 있습니까? – Gujamin

답변

2

예, "상태"검색을 설정 한 다음 NSFetcResultsController에서 반환 된 -fetchedObjects에서 필터링 된 배열을 가리 키도록 NSTableViewDatasource을 전환하십시오.

사용자가 더 많은 정보를 입력하면 해당 배열의 필터를 업데이트 할 수 있으며 저장소로 돌아 가지 않습니다. 이렇게하면 입력 한 첫 번째 문자를 필터링하고 불필요한 출장을 피할 수 있습니다.

+1

고마워, 이것을 고려했지만 그룹화 된 tableview가 있고 numberOfSections 및 rowsForSection을이 접근 방식으로 처리하는 방법을 잘 모르겠습니다. – RunLoop

1

첫 번째 가져 오기 결과를 항상 배열에 저장할 수 있으며 검색 막대의 텍스트가 변경되면 배열의 내용을 다른 조건 자로 필터링 할 수 있습니다.

관련 문제