2012-09-09 66 views
7

我有一個iOS應用程序,使用簡單的UIDocument模型和iCloud存儲的單個內容字段。我使用NSMetadataQuery檢索文檔列表來填充UITableView。我希望在此表頂部顯示新文檔,但默認排序看起來是舊的 - >新的。如何根據修改日期對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

Gist:如何調用-[NSURL getResourceValue:forKey:error:]並傳入NSURLContentModificationDateKey,然後對返回的NSDate值進行降序排序。

詳情:您既可以在一個比較傳遞給-[NSMutableArray sortUsingComparator:]是獲取所需的NSDate在飛行的每個對象,或將它們全部提取到與化合物NSDate, id對象的新數組,而該對象的數組進行排序,然後在完成排序(Python裝飾排序undecorate成語)時提取id引用。

相關問題