Запрос на получение iPhone с локализованной сортировкой
-
18-09-2019 - |
Вопрос
Я пытаюсь получить отсортированные локализованные данные из базовой модели данных.Мой код:
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
и сравнивает их.