У меня есть запрос на выборку, который возвращает объекты с английскими свойствами. Я хочу отсортировать эти объекты по их переведенным (русским) эквивалентам, используя NSLocalizedString
. Мой код неправильно возвращает данные, отсортированные, как если бы они были английскими. Я использую следующий дескриптор сортировки:
[NSSortDescriptor sortDescriptorWithKey:@"category"
ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)]]];
Моя сущность Core Data называется Good
со свойствами category
и name
. Мне нужен массив дескрипторов сортировки, который я могу передать контроллеру выборки (setSortDescriptors:
), который будет сортировать сначала по переведенной категории, а затем по переведенному имени.
Если языковой стандарт английский, а слова на английском, сортировка допустима. Но если языковой стандарт русский или украинский, сортировка не работает. Это uotput для отсортированного массива для русской локали
Кулеры
Кулеры
Память
Память
Микрофоны
Блоки питания
Блоки питания
Звуковые карты
Видеокарты
Видеокарты
и это неправильно. Что я делаю не так? Спасибо!
Обновление 1. Я тестирую его
for (int i = 0; i < sortedArray.count; i++)
{
NSLog(@"%@", NSLocalizedString([[sortedArray objectAtIndex: i] category], nil));
}
Обновление 2, весь код
- (NSFetchedResultsController *) fetchedResultsController
{
if (_fetchedResultsController != nil)
{
return _fetchedResultsController;
}
NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *goodsFetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *goodsEntity = [NSEntityDescription entityForName:@"Goods" inManagedObjectContext:context];
[goodsFetchRequest setEntity: goodsEntity];
NSError * error = nil;
NSArray * goods = [_managedObjectContext executeFetchRequest: goodsFetchRequest error:&error];
NSSortDescriptor *categoryDescriptor = [[NSSortDescriptor alloc] initWithKey: @"category" ascending: YES ];
NSSortDescriptor *nameDescriptor = [[NSSortDescriptor alloc] initWithKey: @"name" ascending: YES selector: @selector(localizedCaseInsensitiveCompare:)];
NSArray *sortedArray = [goods sortedArrayUsingDescriptors:
[NSArray arrayWithObject:
[NSSortDescriptor sortDescriptorWithKey: @"category"
ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)]]];
NSLog(@"------");
for (int i = 0; i < sortedArray.count; i++)
{
NSLog(@"%@", NSLocalizedString([[sortedArray objectAtIndex: i] category], nil));
}
NSArray *sortDescriptors = @[categoryDescriptor, nameDescriptor];
[goodsFetchRequest setSortDescriptors: sortDescriptors];
_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest: goodsFetchRequest managedObjectContext: context sectionNameKeyPath:@"category" cacheName: nil];
_fetchedResultsController.delegate = self;
return _fetchedResultsController;
}
sortedArray
, а неgoods
? - person Rob Napier   schedule 30.03.2015