Можете ли вы указать выбрать уникальное имя с помощью NSPredicate?

У меня есть некоторые данные, хранящиеся в Core Data, которые выглядят примерно так:

| имя | идентификатор | другие_вещи |

Мне нужно отображать имена в UITableView, но я хочу отображать только имена с уникальными парами имя-идентификатор. Таким образом, для:

John | 3 | foo
Betty | 4 | foo
Betty | 4 | bar

Я только хочу, чтобы запрос возвращал Джона, Бетти. Что-то вроде "выбрать уникальное имя, идентификатор из таблицы".

Любой способ сделать это с помощью NSPredicate, или мне нужно вылить дедублированные поля в другой контейнер, а затем искать в нем?


person James Moore    schedule 11.12.2009    source источник


Ответы (2)


Core Data — это структура управления графом объектов, которая просто (необязательно) сохраняет этот граф объектов в постоянном хранилище SQL. Невозможно запросить атрибуты объекта, только объекты. Затем вы можете запросить экземпляры из результирующего массива:

NSArray *instances; //from -[NSManagedObject executeFetchRequest:error:]
NSArray *uniqueNames = [instances valueForKeyPath:@"@distinctUnionOfObjects.name"];

предполагая, что имя находится в свойстве name.

Если вы хотите, чтобы у каждого пользователя было одно имя, один идентификатор и несколько {foo,bar,...}, тогда вы должны смоделировать ситуацию как пользовательский объект с именем и идентификатором и отношением ко многим к объекту. который представляет foo/bar/etc.

Дополнительную информацию о @distinctUnionOfObjects (и других операторах сбора) можно найти в Операторы сбора данных Руководства по кодированию значения ключа.

person Barry Wark    schedule 11.12.2009

Поскольку это основные данные, проверьте -[NSFetchRequest setReturnsDistinctObjects:].

person Dave DeLong    schedule 11.12.2009