Сортировка NSString NSDate в iphone - PullRequest
2 голосов
/ 22 июля 2011

У меня есть массив, в котором есть NSString, преобразованный из NSDate. Я получаю начальный индекс массива и сортирую их. Даты в формате: 08:00, 01:00. Когда я пытаюсь сделать NSSortDescriptor, он всегда дает мне 01PM, а затем 08 AM.

//** Date string **//
NSDate *date1 = [dateFormat dateFromString:startSection];
[dateFormat setDateFormat:@"ah"];
startSection = [dateFormat stringFromDate:date1];
NSString *strSection = [NSString stringWithFormat:@"%@", startSection];

Строка выше добавлена ​​в NSArray. NSArray используется ниже для сортировки строк. И, наконец, тот же массив используется для получения начальной буквы и отображения их индекса в sectionforsectionIndexTitle. Так что у меня есть AM8 и PM1 в качестве разделов, а не 8 утра и 1 вечера.

NSSortDescriptor *nameDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"start"
                                                                   ascending:FALSE
                                                                  selector:@selector(localizedCaseInsensitiveCompare:)] autorelease] ;


NSArray *descriptors = [NSArray arrayWithObject:nameDescriptor];
[[dict objectForKey:aKey] sortUsingDescriptors:descriptors];

1 Ответ

2 голосов
/ 22 июля 2011

Как насчет использования sortUsingComparator:?Но это потребует изменения строки с 08AM на AM08 и 01PM на PM01 перед сравнением, поэтому предполагается, что они будут иметь такую ​​форму.

NSMutableArray * theArray = [dict objectForKey:aKey]; /* To be sorted */
[theArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    NSString * string1 = [NSString stringWithFormat:@"%@%@", [(NSString *)obj1 substringFromIndex:2], [(NSString *)obj1 substringToIndex:2];
    NSString * string2 = [NSString stringWithFormat:@"%@%@", [(NSString *)obj2 substringFromIndex:2], [(NSString *)obj2 substringToIndex:2];

    return [string1 localizedCaseInsensitiveCompare:string2];
}];

/* theArray is now sorted */
...