2012-09-09 4 views
7

iCloud 스토리지를위한 단일 컨텐트 필드와 함께 간단한 UIDocument 모델을 사용하는 iOS 응용 프로그램이 있습니다. NSMetadataQuery를 사용하여 UITableView를 채우기 위해 문서 목록을 검색합니다. 이 테이블의 맨 위에 새 문서가 나타나기를 원하지만 기본 정렬은 old -> new로 나타납니다.수정 날짜별로 UIDocument의 icloud NSMetadataQuery 결과를 정렬하려면 어떻게해야합니까?

내가 필드에 NSSortDescriptor를 사용하여 쿼리를 정렬 할 수있는 문서에서 사용자 정의 날짜 필드가 있는지는 알지만 내 질문은 UIDocument iCloud 저장소를 통해 만든 파일의 내장 수정 날짜별로 정렬 할 수 있습니다 ? 아니면 이것을하는 또 다른 선호되는 방법이 있습니까?

+0

어떤 해결책이 있습니까? – rizzz86

답변

11

이 작업을 수행하는 올바른 방법은 쿼리를 만들 때 쿼리의 정렬 설명자를 설정하는 것입니다. 다음 줄에있는 항목 :

NSMetadataQuery *query = [[NSMetadataQuery alloc] init]; 
[query setSearchScopes:[NSArray arrayWithObject: 
          NSMetadataQueryUbiquitousDocumentsScope]]; 

NSPredicate *pred = [NSPredicate predicateWithFormat: @"%K ENDSWITH '.bin'", 
            NSMetadataItemFSNameKey]; 
[query setPredicate:pred]; 

NSSortDescriptor *sortDescriptor = 
    [[[NSSortDescriptor alloc] initWithKey:NSMetadataItemFSContentChangeDateKey 
           ascending:FALSE] autorelease]; //means recent first 
NSArray *sortDescriptors = [NSArray arrayWithObjects: 
           sortDescriptor, 
           nil];   
[query setSortDescriptors:sortDescriptors]; 

[[NSNotificationCenter defaultCenter] 
    addObserver:self 
    selector:@selector(queryDidFinishGathering:) 
    name:NSMetadataQueryDidFinishGatheringNotification 
    object:query]; 

[query startQuery]; 
0

요점 : -[NSURL getResourceValue:forKey:error:]을 호출하고 NSURLContentModificationDateKey을 전달하고 반환 된 NSDate 값에 내림차순 정렬을 수행하는 것이 좋습니다.

세부 사항 : 각 객체에 대해 필요한 NSDate를 가져 오는 -[NSMutableArray sortUsingComparator:]의 비교기를 전달하거나이 객체를 모두 복합 배열 NSDate, id 개체를 사용하여 새 배열로 가져온 다음 해당 객체의 배열을 정렬 한 다음 정렬이 완료되면 id 참조를 추출하십시오 (python decorate-sort-undecorate 관용구).

관련 문제