Получение минимального значения атрибута в NSSet, созданного из отношения «один ко многим» в базовых данных - PullRequest
3 голосов
/ 27 октября 2009

У меня есть несколько объектов, настроенных в Core Data, один из которых - «Палуба», а другой - «Карта». «Карты» имеют несколько пронумерованных отношений, включая «id». «Колода» имеет отношения один-ко-многим с картами.

Как лучше всего найти Карту в колоде, которая имеет минимальное значение для какого-либо пронумерованного атрибута, такого как id?

Очевидно, я могу получить список карт, как это:

NSSet *cardList = self.cards;

Я думаю, что могу построить выражение, чтобы получить минимум, подобный этому:

NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"id"];
NSExpression *minExpression = [NSExpression expressionForFunction:@"min:" 
            arguments:[NSArray arrayWithObject:keyPathExpression]];

Но я не могу понять, как использовать это выражение для извлечения карты с минимальным значением id (или только минимальным значением id).

1 Ответ

7 голосов
/ 27 октября 2009

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

//assuming Card has an Id property which is a number
NSNumber *minId = [deck valueForKeyPath:@"cards.@min.Id"];

NSSet *minCards = [[deck cards] filteredSetUsingPredicate:[NSPredicate predicateWithFormat:@"Id==%@", minId]];

даст NSSet карт, свойство Id которых равно минимуму в deck.cards.

Подробнее см. В Руководстве по программированию Key-Value Операторы Set и Array .

...