NSSortDescriptor сортировка по алфавиту - PullRequest
0 голосов
/ 27 января 2012

Я пытаюсь отсортировать результаты из «таблицы» CoreData «Треки» аналогично iTunes.Проблема в том, что сортировка "ASC" использует первые символы для сортировки, поэтому я получаю:

  1. (Я не могу получить Нет) Удовлетворение
  2. Трудные дниНочь

Я бы хотел, чтобы Камни появлялись в результатах с "I", игнорируя все что угодно ^ A-Za-z0-9.Я пробовал пользовательский блок выбора и компаратора, но он просто игнорирует его, поэтому я застрял.

Ответы [ 2 ]

2 голосов
/ 27 января 2012

По моему опыту, вам лучше иметь атрибут sortName, который вы генерируете при создании объекта. Затем вы можете использовать этот ключ для более простой и быстрой сортировки результатов CoreData.

1 голос
/ 27 января 2012

Другим решением будет сортировка вручную после получения результатов:

[tracks sortUsingComparator:^NSComparisonResult(id obj1, id obj2)
{
    NSError *error = nil;
    NSString *pattern = @"[^A-Za-z0-9]";
    NSRegularExpression *expr = [NSRegularExpression regularExpressionWithPattern:pattern
                                                                          options:NSRegularExpressionCaseInsensitive
                                                                            error:&error];

    NSString *title1 = [(Track *)obj1 title];
    NSString *title2 = [(Track *)obj2 title];

    NSString *title1Match = [expr stringByReplacingMatchesInString:title1
                                                           options:0
                                                             range:NSMakeRange(0, [title1 length])
                                                      withTemplate:@""];
    NSString *title2Match = [expr stringByReplacingMatchesInString:title2
                                                           options:0
                                                             range:NSMakeRange(0, [title2 length])
                                                      withTemplate:@""];

    return [title1Match compare:title2Match options:NSCaseInsensitiveSearch];
}];

Я также использовал [\ W] в качестве шаблона, но мне показалось, что это был огромный удар по производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...