Erste das Minimum Wert eines Attributs in einem NSSet aus einem One-to-Many Beziehung in Core Data
-
06-07-2019 - |
Frage
Ich habe mehrere Objekte in Core Data einrichten, von denen eine „Deck“ und einer davon ist „Karte“. „Karten“ haben mehrere nummerierte Beziehungen, einschließlich der „id“. „Deck“ hat eine Eins-zu-viele-Beziehung mit Karten.
Was ist der beste Weg, um die Karte in einem Deck zu finden, der den Minimalwert bis zu einem gewissen nummerierten Attribute hat, wie id?
Klar kann ich die Liste der Karten wie diese:
NSSet *cardList = self.cards;
Ich glaube, ich kann einen Ausdruck bauen ein Minimum wie folgt zu erhalten:
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"id"];
NSExpression *minExpression = [NSExpression expressionForFunction:@"min:"
arguments:[NSArray arrayWithObject:keyPathExpression]];
Aber ich kann nicht ganz abtasten, wie man diesen Ausdruck verwenden, um die Karte mit dem minimalen Wert von id (oder nur den minimalen Wert von id) zu extrahieren.
Lösung
können Sie tun dies mit Schlüsselwert-Codierung:
//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]];
die NSSet
von Karten, deren Id
Eigenschaft ist gleich dem Minimum in deck.cards
geben.
Sehen Sie die Schlüsselwert-Programmierhandbuch Beschreibung der Set und Array-Operatoren für weitere Informationen.