Базовые данные (на основе SQLite) пользовательская сортировка строк - PullRequest
3 голосов
/ 09 декабря 2010

В настоящее время у меня есть приложение Core Data с поддержкой SQLite, в которое я загружаю записи, отсортированные по firstName, а затем lastName.

Проблема в том, что у меня есть некоторые имена, такие как (John Doe), и они возвращаются вверху списка, похоже, сортировка по умолчанию выполняется в порядке сортировки ASCII.

Есть ли способ заставить эти записи отображаться после Z?

Я читал о пользовательских дескрипторах сортировки, но, похоже, они не работают, потому что Core Data возвращается к SQLite для сортировки.

Обновление

Вот примерный список того, как мои данные выглядят сейчас

(Abe Simpson)
(Bob Dole)
(Chris Rock)
Alan West
Brian Regan

Как я хочу, чтобы они выглядели

Alan West
Brian Regan
(Abe Simpson)
(Bob Dole)
(Chris Rock)

Ответы [ 5 ]

4 голосов
/ 15 декабря 2010

Добавить новый атрибут BOOL с именем parenthesized, затем ...

- (void)setName:(NSString *)name
{
    [self willChangeValueForKey:@"name"];
    [self setPrimitiveName:name];
    [self didChangeValueForKey:@"name"];
    self.parenthesized = ([name hasPrefix:@"("] &&
                          [name hasSuffix:@")"]);
}

И когда вы делаете выборку:

[fetchRequest setSortDescriptors:
 [NSArray arrayWithObjects:
  [NSSortDescriptor sortDescriptorWithKey:@"parenthesized" ascending:NO],
  [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES],
  nil]];
1 голос
/ 15 декабря 2010

В чем причина круглых скобок?Возможно, вы могли бы упростить для себя ситуацию, если бы вы заменили эту неявную информацию явной информацией в отдельном свойстве, которое затем можно использовать для прямой сортировки

0 голосов
/ 16 декабря 2010

когда вы выполняете выборку основных данных, вы возвращаете массив, сортируете массив с помощью метода сравнения (void) sortUsingSelector: (SEL).затем вы можете написать свой собственный метод сортировки, который возвращает NSOrderAscending, если элемент более ранний, NSOrderDescending, если он более поздний, и NSOrderSame, если он тот же.

0 голосов
/ 15 декабря 2010

Я думаю, что есть действительно простой ответ / решение. Это работает для меня локально (не на iPhone).

order by replace(firstName, '(','')

После прочтения вашего поста, вы хотели, чтобы они были внизу. Вышеприведенное сортирует их так, как если бы скобки игнорировались. Ниже вы получите желаемый результат (хотя, кажется, несколько хакерский).

order by replace(firstName, '(','ZZZ')
0 голосов
/ 09 декабря 2010

Читайте о пользовательских сопоставлений в SQLite. Вы, вероятно, не имеете доступа к ним на i-устройствах.

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