2009-08-13 7 views
0

Ich habe eine Core Data Entität namens Album; Ein Album hat eine Beziehung zu Song-Entities (Songs genannt), und jeder Song hat eine willkürliche Anzahl von Tag-Entities (in einer Tag-Eigenschaft), Tags haben einen Namen. Jetzt möchte ich überprüfen, ob einer der Songs in einem Album einen Tag enthält; Verwenden eines einzelnen NSPredicate.NSPredicates und doppelte to-n-Beziehungen

Eine Ideen, die in den Sinn kam, war:

[NSPredicate predicateWithFormat: @"ANY (ANY songs).tags LIKE %@", someTagName]; 

Aber das verursacht einen Fehler zur Laufzeit („Kann die Format-String parsen“). Ich habe verschiedene Varianten ausprobiert, ohne Erfolg.

Gibt es eine Möglichkeit, dies zu tun?

Antwort

0

Ich glaube, Sie

[NSPredicate predicateWithFormat:@"ANY [email protected] LIKE %@", someTagName] 

Schauen Sie sich auf set and array operators der Schlüsselwertprogrammierhandbuch Abschnitt möchten.

+0

Klingt wirklich gut, ich habe es versucht, aber ich stecke wieder fest. Das passiert mir normalerweise nicht oft ... Jetzt bekomme ich die folgende Ausnahme: *** Beenden App aufgrund der nicht abgefangenen Ausnahme 'NSUnknownKeyException', Grund: '[ valueForUndefinedKey:]: die Entität Das Album ist nicht key-coding-kompatibel für den Schlüssel "songs. @ DistinctUnionOfSets.labels". ' Ich habe versucht, Runde, aber ich konnte nur nicht eine Stelle finden, wo ich die @ distinctUnionOfSets ohne diesen Absturz verursachen könnte. Irgendwelche Ahnung, was ich falsch mache? –

+0

@Julian Sorry, das ist meine Schuld für das Schreiben ohne Test. Da ich kein Core Data-Projekt zum Spielen habe, arbeite ich von ganz oben. Haben Sie @unionOfSets und nicht @distctUnionOfSets versucht? Ich kämpfe immer ein bisschen mit diesen Set-Operatoren. Ich muss oft einen Breakpoint auf einer Zeile wie [album valueForKeyPath: @ "@ songs.tags"] setzen und sehen, was das Ergebnis im Debugger ist. Wenn es sich um eine Reihe von Sets handelt, sollten @ unionOfSets.songs.tags das tun. Wenn es etwas anderes ist, müssen Sie den Schlüsselpfad entsprechend ändern. –

0

Nur ein Gedanke, aber vielleicht ist LIKE nicht auf dem iPhone verfügbar? Ich weiß, ich hatte eine harte Zeit mit BETWEEN, was anscheinend nicht funktioniert.

Also ein Tag hat keine viele-zu-viele Beziehung mit Liedern? Wenn es auf diese Weise modelliert würde, würde das Abrufen der Songs für ein Tag nur den Zugriff auf die Eigenschaft tag.songs erfordern. Wie Sie es modelliert haben, scheint es, dass Tags für jeden Song dupliziert werden können (was in Ihrer App gut sein kann).