如何按修改日期对UIDocument的icloud NSMetadataQuery结果进行排序?

时间:2012-09-09 15:11:27

标签: ios icloud uidocument nsmetadataquery

我有一个iOS应用程序,它使用一个简单的UIDocument模型,只有一个内容字段用于iCloud存储。我检索文档列表以使用NSMetadataQuery填充UITableView。我希望在此表的顶部显示新文档,但默认排序似乎是旧的 - >新。

我知道如果我在文档中有自定义日期字段,我可以在该字段上使用NSSortDescriptor对查询进行排序,但我的问题是是否可以按照通过UIDocument iCloud存储创建的文件的内在修改日期进行排序?或者还有另一种首选方法吗?

2 个答案:

答案 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)。