Ich habe eine Tabelle in Core Data mit den folgenden Eigenschaften:Gruppe durch eine Eigenschaft, während mehr mit Kern Abrufen von Daten
date, name, phone
ich mit Namen nach Datum geordnet eine Liste von 5 eindeutigen Telefonnummern abrufen möge. So in MySQL wäre es so etwas wie:
SELECT name, phone FROM myTable GROUP BY phone ORDER BY date
Also, wenn ich diese Liste von Daten:
01/23/2015 someName1 12345678
01/21/2015 someName2 12345678
01/21/2015 someOtherName1 987654321
Ich möchte eine Liste der eindeutigen Telefonnummern mit dem Datumsfeld Controlling abzurufen, welcher Name mit irgendwelchen doppelten Nummern verbunden sein. In diesem Fall wäre das gewünschte Ergebnis:
01/23/2015 someName1 12345678
01/21/2015 someOtherName1 987654321
aber dies zu tun mit einem NSFetchRequest
scheint ein wenig, da die setPropertiesToGroupBy
kompliziert erfordert die gleiche Liste von Eigenschaften enthält, wie in setPropertiesToFetch
definiert.
Mit anderen Worten, das ist, wie ich denke, dass ich es zu tun wäre in der Lage:
NSEntityDescription *entity = [NSEntityDescription entityForName:@"someEntity" inManagedObjectContext:someContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];
[request setResultType:NSDictionaryResultType];
[request setPropertiesToFetch:@[@"name", @"phone"]];
[request setPropertiesToGroupBy:@[@"phone"]];
[request setFetchLimit:5];
NSSortDescriptor *sortByCreatedDate = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO];
[request setSortDescriptors:@[sortByCreatedDate]];
Allerdings werde ich auf der propertiesToGroupBy
eine Ausnahme erhalten, wenn ich das name
Feld als auch enthalten.
Wie kann ich erreichen, was ich will, ohne manuell durch die Liste gehen zu müssen?
Bitte können Sie Ihre Frage bearbeiten, um ein Beispiel Ihrer Daten und Ihre gewünschte Ausgabe aufzunehmen? Von Ihrer Beschreibung bin ich mir nicht sicher, ob Sie "Gruppieren nach" verwenden müssen. – pbasdf
@pbasdf natürlich - siehe meine aktualisierte Frage. Lassen Sie mich wissen, wenn Sie weitere Fragen haben. –
hast du es versucht? NSArray * groups = [fetchedObjects valueForKeyPath: @ "@ distinctUnionOfObjects.phone"]; – Jim