Gegeben sind die folgenden Organisationen dort Beziehung: Core Data „Gruppe“ mit Objektbeziehung
Was ich will, ist die Zahl der Alben ein Künstler hat. Also ich möchte die Gruppe nach verwenden. Aber ich möchte nicht über alle Künstler iterieren und dort Alben zählen.
So kam ich mit diesem Code auf:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Album" inManagedObjectContext:objectStore.mainQueueManagedObjectContext];
[fetchRequest setEntity:entity];
NSExpressionDescription* ex = [[NSExpressionDescription alloc] init];
[ex setExpression:[NSExpression expressionWithFormat:@"count:(artist)"]];
[ex setName:@"count"];
[ex setExpressionResultType:NSDecimalAttributeType];
[fetchRequest setPropertiesToFetch:@[ @"artist", ex ]];
[fetchRequest setPropertiesToGroupBy:@[ @"artist" ]];
[fetchRequest setResultType:NSDictionaryResultType ];
id results = [objectStore.mainQueueManagedObjectContext executeFetchRequest:fetchRequest error:nil];
Welche das folgende Ergebnis zurück:
<_PFArray 0x7fa1f34c4350>(
{
artist = "0xd000000000080000 <x-coredata://969B0BFF-9B87-4280-9B41-7920138902FC/Artist/p2>";
count = "0xd0000000000c0000 <x-coredata://969B0BFF-9B87-4280-9B41-7920138902FC/Artist/p3>";
},
{
artist = "0xd000000000280000 <x-coredata://969B0BFF-9B87-4280-9B41-7920138902FC/Artist/p10>";
count = "0xd000000000080000 <x-coredata://969B0BFF-9B87-4280-9B41-7920138902FC/Artist/p2>";
},
{
artist = "0xd000000000300000 <x-coredata://969B0BFF-9B87-4280-9B41-7920138902FC/Artist/p12>";
count = "0xd000000000380000 <x-coredata://969B0BFF-9B87-4280-9B41-7920138902FC/Artist/p14>";
},
{
artist = "0xd000000000400000 <x-coredata://969B0BFF-9B87-4280-9B41-7920138902FC/Artist/p16>";
count = "0xd000000000040000 <x-coredata://969B0BFF-9B87-4280-9B41-7920138902FC/Artist/p1>";
}
)
ich etwas anderes erwartet hatte. Wenn ich releaseYear
statt artist
verwendet, ist das Ergebnis (wie erwartet) wie folgt aus:
<_PFArray 0x7f9f235e91c0>(
{
count = 2;
releaseYear = 0;
},
{
count = 2;
releaseYear = 1983;
},
{
count = 1;
releaseYear = 1984;
},
{
count = 1;
releaseYear = 1985;
}
)
Enthält diese Art von Fetch nur funktionieren, mit primitiven Datentypen und nicht mit Objektbeziehungen? Jede Hilfe wird geschätzt! Danke :)
Versuchen Sie, ein Attribut der zugehörigen Entität zu zählen, nicht die Entität selbst. Sehen Sie [hier] (http://stackoverflow.com/a/27323977/3985749) zum Beispiel. In Ihrem Fall count (artist.name), vorausgesetzt, dass keine Künstler Nullnamen haben. – pbasdf
Basieren Sie Ihren Zählungsausdruck auf einer Eigenschaft - nicht auf einer Beziehung - wie 'title' und verwenden Sie' request.propertiesToFetch = @ [@ "artist", ex]; ' – bteapot