Как игнорировать префиксы "A" и "The" при сортировке с использованием NSFetchedResultsController? - PullRequest
4 голосов
/ 21 января 2012

Я использую CoreData для хранения информации о книгах, сохраненной в базе данных SQLite.При сортировке по заголовку я бы хотел игнорировать префиксы «A» и «The».Например, при наличии книг: «Книга кодов» и «Загадка Ферма» я хочу, чтобы «Загадка Ферма» предшествовала «Книге кодов», поскольку «The» следует игнорировать.

Я не могНе найти никакого способа сделать это, кроме добавления постоянного свойства, которое будет содержать заголовок без префиксов.(В приведенном выше примере это свойство, скажем, titleNoPrefixes, должно содержать строку «Кодовая книга»).Сортировка на основе вычисляемых свойств (иначе говоря, переходных свойств) в CoreData представляется невозможной.

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

Ответы [ 2 ]

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

Joshua,

Ваша проблема почти не связана с Core Data как постоянным хранилищем, это общая сортировка базы данных по текстовой проблеме.Традиционное решение вашей проблемы состоит в том, чтобы иметь нормальное поле формы, которое используется в качестве категории сортировки.Возможно, вы захотите все прописными буквами и убрать свои шумовые слова для этого поля.Поскольку это всего лишь названия, это не особенно дорого, с точки зрения хранения.Кроме того, это операция вставки, а не операция поиска.Наконец, временные переменные существуют только в оперативной памяти.Я считаю, что они равны NULL-значениям в хранилище данных.Следовательно, поиск по ним бессмысленен и выдает исключение.

Андрей

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

Вы можете написать свою собственную категорию NSString, которая реализует:

  1. Создание копии NSString с удаленными статьями (при условии, что вы хотите сохранить исходную строку)
  2. Сравнение возвращаемых строкот # 1.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...