Obtention de la valeur minimale d'un attribut dans un NSSet constitué d'une relation un à plusieurs dans des données de base

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

  •  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).

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top