Сортировка NSMutableArray содержит NSArray с использованием sortedArrayUsingComparator
У меня проблема с сортировкой массива 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?
Спасибо.
1 ответ
Ваш формат даты не соответствует строкам даты, которые вы используете.
yyyy-MM-dd hh:mm:ss
означает, что даты, которые вы указываете, должны выглядеть примерно так:
2012-05-09 15:54:21
^^ Day
^^ Month
т. е. в ваших строках отсутствуют часы, минуты и секунды, и у вас есть некоторые даты с 22 и 15 месяцами. Если средство форматирования даты не может проанализировать дату, я думаю, что она возвращает ноль, что означает, что вы пытаетесь поместить ноль в массив, который вызовет исключение.
редактировать
Чтобы на самом деле отсортировать даты, ваш пример кода выглядит нормально, за исключением того, что вы хотите сначала самую последнюю, поэтому поменяйте compare:
NSArray *sortedArray = [arrDate sortedArrayUsingComparator:^(id firstObject, id secondObject) {
return [secondObject compare: firstObject];
}];
Или с изменяемым массивом, вы можете отсортировать на месте:
[arrDate sortUsingComparator:^(id firstObject, id secondObject) {
return [secondObject compare: firstObject];
}];