0

nsdateの配列をソートする際に問題が発生しました。だから私はnsmutablearray内に日付の配列を持っています

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSArray *arrString = [[NSArray alloc] initWithObjects:@"2012-05-01", @"2012-02-01", @"2012-22-03", @"2012-05-01", @"2012-15-01", nil];
NSMutableArray *arrDate = [[NSMutableArray alloc] initWithCapacity:arrString.count];
for (NSString *item in arrString) {
    NSDate *date = [dateFormatter dateFromString:item];
    [arrDate addObject:date];
}

私が多くの場合見たように、彼らは配列をソートするためにこのようなコードを使用します:

NSArray *sortedArray = [arrDate sortedArrayUsingComparator:^(id firstObject, id secondObject) {
    return [((NSDate *)firstObject) compare:((NSDate *)secondObject)];
}];

アレイを配置しようとしましたが、機能しませんでした。nsmutablearrayをソートするための実際に最良の方法にnsdateが含まれている方法を教えてください。インデックス配列の一番上に最新の日付を置きたいです。

したがって、本当の問題は、arrDate内のデータをどのように並べ替えることができるかということです。

ありがとうございました。

4

1 に答える 1

1

日付形式が、使用している日付文字列と一致しません。

yyyy-MM-dd hh:mm:ss

提供する日付は次のようになります。

2012-05-09 15:54:21
        ^^ Day
     ^^ Month

つまり、文字列に時、分、秒がなく、22か月と15か月の日付がいくつかあります。日付フォーマッタが日付を解析できない場合は、nilが返されると思います。これは、nilをに入れようとしていることを意味します。配列。例外が発生します。

編集

実際に日付を並べ替えるには、最新のものを最初に配置することを除いて、サンプルコードは問題ないように見えるので、compare:

NSArray *sortedArray = [arrDate sortedArrayUsingComparator:^(id firstObject, id secondObject) {
     return [secondObject compare: firstObject];
}];   

または、可変配列を使用すると、その場で並べ替えることができます。

[arrDate sortUsingComparator:^(id firstObject, id secondObject) {
     return [secondObject compare: firstObject];
}];    
于 2012-05-09T14:56:28.100 に答える