Ottenere il valore minimo di un attributo in un NSSet fatto da una relazione uno-a-molti nei dati di base
-
06-07-2019 - |
Domanda
Ho diversi oggetti impostati in Core Data, uno dei quali è "Deck" e uno dei quali è "Carta". & Quot; Cards " hanno diverse relazioni numerate, tra cui "id". & Quot; Piattaforma " ha una relazione uno-a-molti con le carte.
Qual è il modo migliore per trovare la carta in un mazzo che abbia il valore minimo per alcuni attributi numerati, come id?
Chiaramente posso ottenere l'elenco delle carte in questo modo:
NSSet *cardList = self.cards;
Penso di poter costruire un'espressione per ottenere un minimo come questo:
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"id"];
NSExpression *minExpression = [NSExpression expressionForFunction:@"min:"
arguments:[NSArray arrayWithObject:keyPathExpression]];
Ma non riesco a capire come usare quell'espressione per estrarre la carta con il valore minimo di id (o solo il valore minimo di id).
Soluzione
Puoi farlo utilizzando la codifica valore-chiave:
//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]];
fornirà il NSSet
di carte la cui proprietà Id
è uguale al minimo in deck.cards
.
Vedi la descrizione della Guida alla programmazione dei valori-chiave di Operatori set e array per maggiori informazioni.