У меня есть запрос на выборку, который возвращает объекты с английскими свойствами. Я хочу сортировать эти объекты на основе их переведенных (русских) эквивалентов, используя на NSLocalizedString
. Мой код неправильно возвращает данные, отсортированные так, как если бы это был английский. Я использую следующий дескриптор сортировки:Сортировать объекты по переведенным свойствам
[NSSortDescriptor sortDescriptorWithKey:@"category"
ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)]]];
сущность Мои основных данных называется Good
с category
и name
свойствами. Мне нужен массив дескрипторов сортировки, который я могу передать контроллеру выборки (setSortDescriptors:
), который сортирует сначала по переводимой категории, а затем по переводу имени.
Если язык является английским, а слова на английском языке сортируются в порядке. Но когда локаль является русской или украинской, эта сортировка не работает. Это uotput для отсортированного массива для русского языка
Кулеры
Кулеры
Память
Память
Микрофоны
Блоки питания
Блоки питания
Звуковые карты
Видеокарты
Видеокарты
и его не так. Что я делаю неправильно? Благодаря!
Update 1: Im тестирование его
for (int i = 0; i < sortedArray.count; i++)
{
NSLog(@"%@", NSLocalizedString([[sortedArray objectAtIndex: i] category], nil));
}
Update 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;
}
Можете ли вы более точно узнать, как вы тестируете это? Я не могу воспроизвести это. Он сортирует Блоки питания, Блоки питания, Видеокарты, Видеокарты, Звуковые карты, ...(который, я считаю, верен) в моих тестах на Mac и iOS на английском и русском языках. Вы уверены, что вы выводите 'sortedArray', а не' товар'? –