0

NSSortDescriptor を使用して、日付をキーとしてオブジェクトを並べ替えました。私のコード:

 NSLog(@"Before sorting: %@", temp);
    NSSortDescriptor *dateSortDescriptor = [NSSortDescriptor sortDescriptorWithKey: @"date" ascending: YES];
    NSArray *sortedArray2 = [temp sortedArrayUsingDescriptors:[NSArray arrayWithObject: dateSortDescriptor]];
    NSLog(@"After sorting: %@", sortedArray2);
    NSMutableArray *afterSorting = [[(NSArray*)sortedArray2 mutableCopy]autorelease];

日付が

22/08/2012
23/08/2012
25/09/2012

ただし、NSSortDescriptor は最初の 2 つの数字のみでソートされているように見えることがわかりました。これは、日付が少し変わると、結果が次のようになるためです。

10/09/2012
22/08/2012
23/08/2012

誰でもアドバイスをお願いできますか?上記のコードと同様に NSSortDescriptor を使用して他の多くの投稿を見ましたが、どこにもエラーがないようです。私にとっては、月ではなく日でのみソートされます。私がしていることは、日付が近いオブジェクトを上にしてソートすることです。ありがとう!

4

2 に答える 2

1

あなたが示したソート順は実際には正しいです。問題は、日付ではなく文字列を並べ替えていることです。可能であれば、 のインスタンスではなく のdateインスタンスをプロパティに入力すると、ソートが期待どおりに行われます。NSDateNSString

NSDateなんらかの理由でプロパティでインスタンスを使用できない場合date(少し奇妙に思えるかもしれませんが、誰にもわかりません)、代わりに配列にsortedArrayUsingComparator:メッセージを送信し、独自の並べ替えを定義するブロックを渡すことで、配列を並べ替えることができます。

于 2012-08-19T16:00:16.263 に答える
0

文字列のみを比較しているため、ソートは正しく機能しています。そのため、まず NSDate を NSString に変換し、次に NSDate で並べ替え操作を行い、以下のように並べ替えられた日付の文字列配列に戻す必要があります。

- (NSArray *) sortArrayOfDateStrings:(NSArray*)array {

NSMutableArray *sortedArray = [NSMutableArray arrayWithCapacity:0];
NSMutableArray *sortedDateArray = [NSMutableArray arrayWithCapacity:0];
NSDate *dateObject;

for(NSString *dateString in array){

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setDateFormat:@"dd/MM/yyyy"];
NSDate *dateFromString = [[NSDate alloc] init];

dateFromString = [dateFormatter dateFromString:dateString];
[dateFormatter release];

[sortedArray addObject:dateFromString];
}

NSSortDescriptor *dateSortDescriptor = [NSSortDescriptor sortDescriptorWithKey: @"date" ascending: YES];
[sortedDateArray addObjectsFromArray:[sortedArray sortedArrayUsingDescriptors:[NSArray arrayWithObject: dateSortDescriptor]]];

[sortedArray removeAllObjects];

for (NSDate* sortedDate in sortedDateArray){

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy"];
NSString *strDate = [dateFormatter stringFromDate:sortedDate];
NSLog(@"%@", strDate);
[dateFormatter release];

[sortedArray addObject:strDate];
}

return sortedArray
}
于 2012-08-19T19:22:33.380 に答える