Я разобрался с твоей проблемой. На самом деле есть две проблемы.
-
array
содержит только один объект NSString
, поэтому сначала вам нужно преобразовать эту строку в NSArray
, я имею в виду, вам нужно отделить внутреннюю объекты даты.
Что вы можете сделать это методом NSString
componentsSeparatedByString
.
После разделения объектов к каждому объекту по-прежнему добавляется один пробел, который вызывает проблему при сравнении объектов даты.
Поэтому перед преобразованием в строку необходимо удалить все пробелы из строки. Компоненты массива.
Давайте посмотрим на это один за другим. заданный вами массив.
NSArray *array = [NSArray arrayWithObject:@"042018, 052018, 122018, 012019, 022019, 032019"];
Получить строку из этого массива
NSString *dateString = array[0];
Теперь эта строка содержит пробелы, которые являются проблемой здесь .
// Remove extra characters like whitespace from your string
NSString *dateString = array[0];
//Output: 042018, 052018, 122018, 012019, 022019, 032019
NSString *trimmedString = [dateString stringByReplacingOccurrencesOfString:@" " withString:@""];
//Output: 042018,052018,122018,012019,022019,032019
Вы можете наблюдать пробел в выводе выше, который удаляется в trimmedString
.
Преобразование строки в массив:
NSArray *dateArray = [trimmedString componentsSeparatedByString:@","];
И, последний шаг, сортировка этого массива
NSArray *sortedArray = [dateArray sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
NSDateFormatter *formatter = [NSDateFormatter new];
[formatter setDateFormat:@"MMyyyy"];
NSDate *date1 = [formatter dateFromString:obj1];
NSDate *date2 = [formatter dateFromString:obj2];
return ([date1 compare:date2] == NSOrderedAscending) ? YES : NO;
}];
NSLog(@"sortedArray :%@\n", sortedArray);
// Output: (
032019,
022019,
012019,
122018,
052018,
042018
)
Если Вы можете sh преобразовать его в строку, вы можете сделать это с помощью метода componentsJoinedByString
NSString *sortedString = [sortedArray componentsJoinedByString:@", "];
Обратите внимание, что после ,
я добавил один дополнительный пробел, чтобы соответствовать желаемому результату.
//Output: 032019, 022019, 012019, 122018, 052018, 042018