2012-09-09 58 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引用。

相关问题