7

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

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

4

2 回答 2

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];
于 2012-11-07T13:58:33.190 回答
0

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

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

于 2012-10-02T00:43:09.387 回答