如何通过修改date对UIDocument的icloud NSMetadataQuery结果进行sorting?

我有一个iOS应用程序,使用简单的UIDocument模型和iCloud存储的单个内容字段。 我检索文件的列表来填充使用NSMetadataQuery的UITableView。 我希望在这个表的顶部显示新的文档,但默认sorting看起来是旧的 – >新的。

我知道如果我在文档中有一个自定义date字段,我可以使用该字段上的NSSortDescriptor对查询进行sorting,但是我的问题是可以通过UIDocument iCloud存储创build的文件的固有修改date进行sorting吗? 还是有另一种首选的方法来做到这一点?

看起来正确的做法是在创build查询时设置查询的sorting描述符。 沿着这些线路的东西:

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]; 

Gist:如何调用-[NSURL getResourceValue:forKey:error:]并传入NSURLContentModificationDateKey ,然后对返回的NSDate值进行降序sorting。

详细信息:你可以传入一个比较器到-[NSMutableArray sortUsingComparator:] ,它为每个对象快速获取所需的NSDate,或者将它们全部带到一个复合NSDate, id对象的新数组中,然后对该数组进行sorting对象,然后在完成sorting(python decorate-sort-undecorate idiom)时提取id引用。