Возможна ли сортировка NSSortDescriptor по части ключа? - PullRequest
1 голос
/ 19 февраля 2011

У меня есть приложение CoreData iphone с видом, отображающим адреса.

Адрес выглядит следующим образом: «5 Blob Street, 2222, Suburbia», где «5 Blob Street» - ключ address_and_number, «2222» почтовый индекс и «Suburbia» - пригород.

В настоящее время я использую этот NSSortDescriptor, который отлично работает:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] 
                                    initWithKey:@"address_and_number" ascending:YES];

Однако мой клиент хочет отсортировать по названию улицы, то есть по ключу address_and_number, "Blob Street" будет оцениваться.

Есть ли способ выполнить такую ​​сортировку, не прибегая к разделению ключа address_and_number на два ключа: «адрес» и «номер»?

Могу ли я использовать регулярное выражение, чтобы получить только ту часть ключа address_and_number, которая мне нужна для сортировки, и каким-то образом добавить ее в объект NSSortDescriptor?

Ответы [ 2 ]

1 голос
/ 20 февраля 2011

Согласно ответу на соответствующий вопрос на Пользовательская сортировка с использованием категорий и основных данных - поддерживается ли она фреймворком?

Сортировка внутри NSFetchedResultsController выполняется вуровень постоянного хранилища, поэтому, если вы используете SQLite в качестве бэкэнда, он потерпит неудачу.

Для чего-то подобного я бы нормализовал данные и сохранил месяц и день месяца в дополнение к фактической дате рождения, чтобывы можете сортировать по ним.

Попробовав и селектор, и компаратор, ни один из которых не работал в качестве моего постоянного уровня, я использую sqlite3, я прибегнул к разделению ключа address_and_number на ключи address_street_name и address_street_number,и затем сортировка по address_street_name.

0 голосов
/ 19 февраля 2011

Попробуйте добавить блок NSComparator к инициализации NSSortDescriptor следующим образом:

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]
                                    initWithKey:@"Address_suburb" ascending:YES comparator:^NSComparisonResult(id obj1, id obj2) {
                                      // do your comparison without house numbers here
                                      // return either NSOrderedAscending, NSOrderedDescending or NSOrderedSame
                                    }];
...