7

iCloud ストレージ用の単一のコンテンツ フィールドを持つシンプルな UIDocument モデルを使用する iOS アプリケーションがあります。ドキュメントのリストを取得して、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 decor-sort-undecorate イディオム)。

于 2012-10-02T00:43:09.387 に答える