Obtendo o valor mínimo de um atributo em um NSSet Feito a partir de uma relação de um-para-muitos em Core Data
-
06-07-2019 - |
Pergunta
Eu tenho vários objetos criadas em Core Data, um dos quais é "plataforma" e um dos quais é "Cartão". "cartões" têm vários relacionamentos numeradas, incluindo "id". "Plataforma" tem um relacionamento um-para-muitos com cartões.
Qual é a melhor maneira de encontrar o cartão em um deck que tem o valor mínimo para algum atributo numerada, como id?
É claro que eu posso obter a lista de cartões como este:
NSSet *cardList = self.cards;
Eu acho que eu posso construir uma expressão para obter um mínimo assim:
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"id"];
NSExpression *minExpression = [NSExpression expressionForFunction:@"min:"
arguments:[NSArray arrayWithObject:keyPathExpression]];
Mas eu não posso bastante Suss como usar essa expressão para extrair o cartão com o valor mínimo de id (ou apenas o valor mínimo de id).
Solução
Você pode fazer isso usando Key-Value codificação:
//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]];
dará a NSSet
de Cartões cuja propriedade Id
é igual ao mínimo deck.cards
.
Veja o valor-chave de programação Descrição do Guia de Definir e de matriz Operadores para mais informações.