2012-07-20 2 views
3

NSFetchedResultController에서 관리하는 tableview가 있습니다. 하강 시간표시하기 위해 가져온 결과의 순서를 바꾸는 방법은 무엇입니까?

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"timeStamp >= %@",someDate]; 
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"timeStamp" ascending:NO]; 
request.sortDescriptors = [NSArray arrayWithObject:descriptor]; 
request.fetchLimit = 100; 

그래서, 결과는 명령을 받게됩니다 : 내가 가장 최근에 추가 된 레코드를 가져 오기 위해 원하기 때문에 , 나는 다음과 같이 컨트롤러를 설정합니다. 그러나 결과도 오름차순으로 tableview에 저장되기를 바랍니다.
어떻게 결과를 재정렬합니까?

결과를 다른 배열에 넣고 순서를 바꾸고 가져온 결과가 업데이트 될 때마다 똑같은 작업을 수행 하시겠습니까? 내가 모든 인출하지 않음으로써이 그것을 할 수있는 가장 쉬운 방법입니다 생각

NSArray* reversedArray = [[startArray reverseObjectEnumerator] allObjects]; 

: 당신이 설정 YES 오름차순, 그것을 역 배열을 되돌리고 싶은 경우

+0

sortDescriptor를 오름차순으로 설정하면 테이블에 오름차순 no로 표시됩니다. 그게 내가 원하는 걸 하는게 아니야. (나는 그들에게 시간에 따라 테이블에 놓기를 원한다. YES ...) – longway

+0

두 번이나 실행하지 그래? Btw 만약 fetchLimit 100 recs가 없다면 언젠가 100 recs에서 모든 것을 얻을 수 있다는 것을 의미하지 않습니까? 그래서 반대편을 원한다면 언젠가는 + 100이 될 것입니다. 그러나 언젠가 언젠가는 1000 recs 거리가 있다면 지금부터는 같은 기록을 얻지 못할 것입니다. – Panagiotis

+0

@Panagiotis - 아래 답변을 참조하십시오. – isaac

답변

1

후 ... 배열에 결과를 넣어 시간!

0

조건부는 someDay보다 크거나 같은 timeStamp를 갖는 엔티티로 결과 세트를 제한합니다.

정렬 설명자는 가져 오기 요청을 가져 오는 레코드에 알리고 실제로 지정된 순서대로 정렬/표시합니다.

가져 오기 제한에 따라 100 개가 넘는 항목이 반환되지 않습니다.

일치 항목이 1000 개이고 sortAscending이 YES 인 경우 timeStamp보다 새로운 가장 오래된 레코드를 얻고 두 번째로 오래된 레코드를 반환합니다. sortAscending이 NO이면, timeStamp보다 새로운 최신 레코드를 얻고 두 번째 가장 최근의 레코드를 반환하고 timeStamp보다 새로운 가장 오래된 레코드 (100 번째 레코드가 존재할 때까지)를 찾습니다.

UIableViews와 NSFetchedResultsController는 매우 자연스럽게 함께 작동합니다. NSIndexPaths를 처리하는 방식을 변경하지 않는 한 기본적으로 가져온 결과 컨트롤러를 사용하여 테이블 뷰를 지원할 때 주문, 섹션 및 삽입/삭제 작업이 제공됩니다. 이 경우 결과 세트를 재정렬하려고 할 필요가 없습니다. CoreData에 원하는 내용, 양, 순서 및 순서를 지정하면됩니다.

예상대로 결과를 얻으려면 레코드 정렬 방법을 반영하기 위해 정렬 설명자를 수정하기 만하면됩니다. 이 경우 YES로 설정된 오름차순으로 :

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"timeStamp >= %@",someDate]; 
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"timeStamp" ascending:YES]; 
request.sortDescriptors = [NSArray arrayWithObject:descriptor]; 
request.fetchLimit = 100; 

그리고 그렇게해야합니다. 이 경우에는 세트를 역순으로 정렬 할 필요가 없습니다.

관련 문제