UISearchDisplayController/NSFetchedResultsController с пользовательским порядком сортировки

Я реализую функцию поиска в своем приложении. Я хотел бы, чтобы пользователь искал слово одновременно в нескольких атрибутах данного объекта.

Вот пример сущности с 3 строковыми атрибутами: Person (firstName, lastName, примечания)

Давайте используем фиктивный набор данных с 3 людьми:

  • «Эмили», «Мосты», «Она очень скоро будет в городе».
  • «Джонни», «Уильямс», «Этот чувак действительно крут».
  • «Уилл», «Смит», «Он ничего не помнит почему-то».

Теперь давайте предположим, что пользователь ищет вхождение "will" и что мы запускаем поиск без учета регистра. Все три ранее описанных человека будут соответствовать слову «будет» благодаря использованию orPredicateWithSubpredicates.

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

  • «Уилл», «Смит», «Он ничего не помнит почему-то».
  • «Джонни», «Уильямс», «Этот чувак действительно крут».
  • «Эмили», «Мосты», «Она очень скоро будет в городе».

Для этой функции поиска «имя» более релевантно, чем «фамилия», которые оба более релевантны, чем атрибут «примечания».

Поскольку я использую UISearchDisplayController, я также использую NSFetchedResultsController, для которого требуется NSSortDescriptor. Проблема для меня сейчас в том, какой атрибут/ключ я собираюсь использовать для инициализации NSSortDescriptor?

Я уже прочитал много сообщений и подумал, что временное свойство может помочь мне с этой проблемой, но я не могу понять, как/когда настроить это переходное свойство, которое можно было бы назвать чем-то вроде «sortKey» и установить для этих ценности:

  • 1: Для совпадения по "firstName"
  • 2: Для совпадения по «фамилии»
  • 3: Для совпадения по «нотам»

В конце концов, я думаю, я мог бы попытаться запустить три разных запроса, но тогда мне пришлось бы отказаться от использования NSFetchedResultsController и всей его магии...

Я не знаю, достигаю ли я пределов NSFetchedResultsController или что-то в этом роде, но любой указатель был бы великолепен, спасибо!

Джосс.


comment
Вместо этого я бы подумал о подклассе NSSortDescriptor. Переходное свойство было бы хорошо, если вам нужны данные только из одного объекта, но вам нужно сравнить несколько полей из нескольких объектов, чтобы определить желаемый порядок сортировки.   -  person Wain    schedule 23.04.2013
comment
Спасибо @Wain за ваше предложение. Звучит как хорошая идея. Я только что попробовал это, но не могу понять, как заставить вызов compareObject:toObject: message. Здесь есть интересный пост . Похоже, мне придется отказаться от использования NSFetchedResultsController.   -  person Joss    schedule 25.04.2013
comment
Интересный пост. И, как говорится, вы можете использовать FRC для отслеживания изменений и запуска обработки пользовательской сортировки...   -  person Wain    schedule 25.04.2013