4

NSSortDescriptor は、かなり扱いやすいクラスのはずです。

適切に @"date" という名前の NSDate 型の属性を持つエンティティを CoreData に格納しました。ソート記述子を NSFetchRequest に適用しようとしていますが、期待した結果が返されないようです。

私が望んでいる結果は、単に日付を時系列に並べることであり、代わりに CoreData に追加された順序で返されます。

おそらく、あなたはガイダンスを提供することができますか?

パラメータ「昇順」はソートを制御するものですか?

いくつかのコード:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"Data" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entityDesc];

[fetchRequest setFetchBatchSize:10];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];    

[fetchRequest setSortDescriptors:sortDescriptors];

NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
4

4 に答える 4

3

個別のソート ルーチン (関数またはブロック) は、私にはやり過ぎのように見えます。コードに表示されているソート記述子メソッドを使用して、コアデータエンティティを日付属性で定期的にソートしています。毎回完璧に機能します。

明らかに、他の間違いがあるに違いありません。

  • タイプがマネージド オブジェクト モデル エディタとクラス ファイル (このData.h場合は ) で正しく設定されているかどうかを確認します。
  • また、この属性を操作していないかどうかを確認して、作成順序が続くようにしてください。
  • また、この属性を type の別の属性と混同しないようにしてくださいNSDate
于 2012-08-27T20:44:38.913 に答える
3

NSSortDescriptorsの詳細はこちら

または、coreDate の日付を取得した後に日付の配列を並べ替えたい場合は、次のようにします。

//This is how I sort an array of dates.
NSArray *sortedDateArray = [dateArray sortedArrayUsingFunction:dateSort context:NULL];

// This is a sorting function
int dateSort(id date1, id date2, void *context)
{    
    return [date1 compare:date2];
}

これは、整数をソートするためのアップルのコードです(日付をソートするように変更するだけです):NSComparator

NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {

    if ([obj1 integerValue] > [obj2 integerValue]) {
        return (NSComparisonResult)NSOrderedDescending;
    }

    if ([obj1 integerValue] < [obj2 integerValue]) {
        return (NSComparisonResult)NSOrderedAscending;
    }
    return (NSComparisonResult)NSOrderedSame;
}];
于 2012-08-27T16:35:22.657 に答える
-1

サンプル ""日付を日付に変更するだけです

のように

NSSortDescriptor *sortDescriptor = 
  [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];

への変更

NSSortDescriptor *sortDescriptor = 
  [[NSSortDescriptor alloc] initWithKey:@"Date" ascending:YES];

そしてそれは完全に機能します

于 2013-05-01T12:42:23.173 に答える