Вопрос

Я пытаюсь получить отсортированные локализованные данные из базовой модели данных.Мой код:

NSEntityDescription *entityDescription = [NSEntityDescription entityForName: entityDescriptionValue
                                                     inManagedObjectContext: context];

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity: entityDescription];

[fetchRequest setPredicate: predicate];

NSSortDescriptor *sortBy = [[NSSortDescriptor alloc] initWithKey: @"name" ascending: YES selector: @selector(localizedCompare:)];
[fetchRequest setSortDescriptors: [NSArray arrayWithObject: sortBy]];
[sortBy release];

Но когда я получаю объекты, они все равно сортируются по исходным значениям (нелокализованным данным).

Что я делаю не так?

Это было полезно?

Решение

Как получить локализованное names из сущности CoreData?Это не то localizedCompare: волшебным образом извлекает локализованную версию строк и сравнивает их.Вместо этого он использует локализованный порядок сортировки для тех же строк.Отсортированная версия массива, содержащая @"England", @"France", @"Germany" в любой стране было бы одинаково...они не содержат никаких акцентированных символов или чего-то еще.Результат localizedCompare: может измениться только в том случае, если в двух языках используется разный порядок сортировки букв.

Если вы хотите получить что-то из Localizable.strings в зависимости от свойства объектов CoreData вам необходимо сделать это вручную.Серверная часть Sqlite CoreData не будет обрабатывать это на уровне запросов на выборку.Поэтому вам нужно сначала получить записи в NSArray, а затем нужно отсортировать их, используя sortedArrayUsing...: передав метод, который извлекает локализованные имена по NSLocalizedString и сравнивает их.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top