2010-09-08 7 views
6

Ich verwende einen persistenten SQLite-Speicher. Ich habe eine Klasse Den mit einer zu-viele Beziehung Bear. Bear hat mehrere Felder:NSPRedate, das mehrere Felder in einer To-Viele-Beziehung referenziert?

Bear: 
    breed 
    color 
    age 
    ... 

Als ich Anfragen für meine Den Objekte holen baue ich auf Objekte filtern, die ein verwandtes Bear mit einem bestimmten Feldwert haben:

NSPredicate *hasGrizzlyPred = [NSPredicate predicateWithFormat:@"ANY Bear.breed == 'grizzly'"]; 

Oder kann ich einfach wie leicht die Suche nach einem Den, die einen Braunbären hat:

NSPredicate *hasBrownBearPred = [NSPredicate predicateWithFormat:@"ANY Bear.color == 'brown'"]; 

Aber ist es eine Möglichkeit zu suchen eine Den, die einen Bären hat, der sowohl braun als auch ein Grizzly ist? Im Folgenden ist legal, aber falsch, denke ich:

// Not quite right: search for a den with a brown bear AND a grizzly 
NSPredicate *hasBrownAndGrizzlyPred = [NSPredicate predicateWithFormat:@"ANY Bear.color == 'brown' AND ANY Bear.breed == 'grizzly'"]; 

Antwort

6

Sie dies mit einem SUBQUERY Prädikat Ausdruck tun können. Im Falle einer Abfrage für dens mit einem Bären (wo Den hat eine n-Beziehung zu Bearbears genannt), die beide braun und ein Grizzly ist:

[NSPredicate predicateWithFormat:@"SUBQUERY(bears, $b, $b.color=='brown' AND $b.breed=='grizzly')[email protected] > 0"];

+0

Die Dokumentation Core Data lässt mich ... manchmal frustriert. Dies ist perfekt. –

+1

Ich habe viele Leute auf die "NSExpression" -Dokumentation hingewiesen. Bitte senden Sie einen Bugreport auf bugreporter.apple.com in der Dokumentation und schlagen Sie vor, wie es dargestellt worden sein könnte, damit Sie es früher gefunden haben könnten. –

+0

ist es möglich, das zu speichern. @ Zählwert? – Piero

Verwandte Themen