2010-12-10 5 views
0

iPhone CoreData Funky Fetch-Anfrage: Ich möchte Funktion zum Abrufen Array von Unique-CategoryCodes für meine Produkte erstellen Ich habe Entität "Produkt" und es gibt eine Feld (Eigenschaft) Kategorie. Natürlich ist Kategorie die Beziehung zu den Entitäten.CoreData - Einzigartige Werte von subEntity ....?

Dies, wenn meine Funktion:

- (NSArray *)uniqueCategoriesWithQuery:(NSString *)query { 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Product" inManagedObjectContext:[self managedObjectContext]];  
NSDictionary *entityProperties = [entity propertiesByName]; 
NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:entity]; 
[request setReturnsDistinctResults:YES]; 
[request setPropertiesToFetch:[NSArray arrayWithObject:[entityProperties objectForKey:@"Code"]]]; 
[request setResultType:NSDictionaryResultType]; 
[request setIncludesSubentities:YES]; 
[request setIncludesPropertyValues:YES]; 
NSError *fetchError = nil; 
NSArray *result = [[self managedObjectContext] executeFetchRequest:request error:&fetchError]; 
DebugLog(@"%@", result); 
if (fetchError == nil && [result count] > 0) { 
    return result; 
} 
return nil; 

}

MyResult: 2010-12-10 05: 55: 33,683 iApp [3453: 307] - [ShoppingHelper uniqueCategoriesWithQuery:] [Zeile 1193] ( { Kategorie = "0x495a200"; }, { Kategorie = "0x4959ce0"; } )

Code funktioniert gut, aber ich kann die Ergebnisse überhaupt nicht verwenden. Ich habe meine Kategorien ... aber ID 'anstelle von NSStrings .. Wie man es konsumiert?

vielleicht sollte ich verwenden: [Anfrage setPropertiesToFetch: [NSArray arrayWithObject: [entityProperties objectForKey: @ "Categories.Code"]]];

um die NSStrings im Distinct NSDictionary zu bekommen?

OR

Fund Kategorie BY ID - Wie es zu tun?

Antwort

0

Wenn Sie die Verwendung von NSDictionaryResultType vermeiden und stattdessen verwaltete Objekte zurückgeben, können Sie einfach auf die Objekte Category über die entsprechende Eigenschaft für die zurückgegebenen Objekte Product zugreifen. Von dort aus können Sie aus jeder Kategorie die gewünschten Informationen abrufen. Wenn Sie dies tun und ein sehr großes Ergebnis festgelegt haben, möchten Sie möglicherweise set the fetch batch size.

+0

Danke, aber wenn ich verwaltete Objekte zurückgeben, funktioniert die "setReturnsDistinctResults: YES" nicht - ich bekomme alle Produkte. Ich brauche nur eindeutige Kategorien für die gefilterte Produkttabelle. So etwas wie SELECT DISTINCT Category FROM Produkte WHERE ProductName wie '% mylikeString%'. – Cezar

+0

Ah, ja, tut mir leid. –