我有一个iOS应用程序,它使用一个简单的UIDocument模型,只有一个内容字段用于iCloud存储。我检索文档列表以使用NSMetadataQuery填充UITableView。我希望在此表的顶部显示新文档,但默认排序似乎是旧的 - >新。
我知道如果我在文档中有自定义日期字段,我可以在该字段上使用NSSortDescriptor对查询进行排序,但我的问题是是否可以按照通过UIDocument iCloud存储创建的文件的内在修改日期进行排序?或者还有另一种首选方法吗?
答案 0 :(得分: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];
答案 1 :(得分:0)
Gist:如何调用-[NSURL getResourceValue:forKey:error:]
并传入NSURLContentModificationDateKey
,然后对返回的NSDate值进行降序排序。
详细信息:您可以将比较器传递给-[NSMutableArray sortUsingComparator:]
,以便为每个对象动态获取所需的NSDate,或者将它们全部提取到具有复合NSDate, id
对象的新数组中,并排序该对象的数组,然后在完成排序时提取id
引用(python decorate-sort-undecorate idiom)。