Obtention de la valeur minimale d'un attribut dans un NSSet constitué d'une relation un à plusieurs dans des données de base
-
06-07-2019 - |
Question
J'ai créé plusieurs objets dans Core Data, dont "Deck". et l'un d'entre eux est "Carte". " Cartes " avoir plusieurs relations numérotées, y compris "id". " Deck " a une relation un-à-plusieurs avec les cartes.
Quel est le meilleur moyen de trouver la carte dans une Deck qui a la valeur minimale pour un attribut numéroté, tel que id?
Clairement, je peux obtenir la liste des cartes comme ceci:
NSSet *cardList = self.cards;
Je pense que je peux créer une expression pour obtenir un minimum comme celui-ci:
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"id"];
NSExpression *minExpression = [NSExpression expressionForFunction:@"min:"
arguments:[NSArray arrayWithObject:keyPathExpression]];
Mais je ne sais pas trop comment utiliser cette expression pour extraire la carte avec la valeur minimale id (ou seulement la valeur minimale id).
La solution
Vous pouvez le faire en utilisant le codage Valeur-clé:
//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]];
donnera le NSSet
des cartes dont la propriété Id
est égale au minimum dans deck.cards
.
Voir la description de Opérateurs Set et Array pour plus d'informations.