Ottenere il valore minimo di un attributo in un NSSet fatto da una relazione uno-a-molti nei dati di base

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

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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top