Получение минимального значения атрибута в NSSet, созданного из отношения «один ко многим» в базовых данных
-
06-07-2019 - |
Вопрос
У меня есть несколько объектов, настроенных в Базовых данных, одним из которых является "Палуба" и один из которых является "картой". & Quot; карта & Quot; иметь несколько пронумерованных отношений, включая "id". & Quot; Колода & Quot; имеет отношения один-ко-многим с карточками.
Как лучше всего найти Карту в колоде, которая имеет минимальное значение для какого-либо пронумерованного атрибута, такого как id?
Очевидно, я могу получить список карточек, как это:
NSSet *cardList = self.cards;
Я думаю, что могу построить выражение, чтобы получить минимум, подобный следующему:
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"id"];
NSExpression *minExpression = [NSExpression expressionForFunction:@"min:"
arguments:[NSArray arrayWithObject:keyPathExpression]];
Но я не могу понять, как использовать это выражение для извлечения карты с минимальным значением id (или просто минимальным значением id).
Решение
Вы можете сделать это, используя кодирование значения ключа:
//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
.
См. описание в Руководстве по программированию значения ключа Операторы Set и Array для получения дополнительной информации.