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

StackOverflow https://stackoverflow.com/questions/1627447

  •  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 для получения дополнительной информации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top