Ich habe eine Lösung mit Unterabfrage gefunden, aber ich verstehe nicht, warum das, was ich zuerst versucht habe, nicht funktioniert hat.
Hier ist mein Datenmodell. Ich hole Ratschläge.
Ich kann folgendes als Prädikat machen:
%Vor%funktioniert einwandfrei und gibt einen Ratschlag zurück, wenn mindestens einer seiner Bedingungen diesen Terraintyp hat.
Wenn ich dies jedoch versuche, schlägt es fehl:
%Vor%Was ich tun möchte, ist, einen Ratschlag zurückzugeben, wo mindestens eine seiner Bedingungen keinen Geländestyltyp hat.
Allerdings funktioniert Folgendes:
%Vor% Kann jemand erklären, warum ich bei der Suche nach Null die ANY
-Syntax nicht verwenden kann?
Kann mir jemand erklären, warum ich bei der Suche nach Null die ANY-Syntax nicht verwenden kann?
Ja! Hier ist was los ist.
%Vor%Lassen Sie uns das zuerst in die entsprechenden linken und rechten Ausdrücke aufteilen:
%Vor% Dies wird ausgewertet, indem das SELF
-Objekt (eine Advice
-Instanz) genommen und das valueForKeyPath:@"conditions.terrain"
angefordert wird. Das Ergebnis dieses Schlüsselpfads wird eine Sammlung sein. Du machst im Wesentlichen:
Sie haben also eine Sammlung von (potenziellen) Terrain
Instanzen. Nun, was wissen wir über Sammlungen in Objective-C? Nun, zum einen können sie nil
nicht enthalten. Sie können nur Objekte enthalten. Das bedeutet, dass bei der Ausführung des Abschnitts ANY
des Prädikats die Elemente im Array durchlaufen werden und keine davon nil
angezeigt wird.
Somit schlägt Ihr Prädikat fehl. Ich habe versucht, mit einigen anderen Variationen herumzuspielen (mit [NSNull null]
anstelle von nil
usw.), aber keiner von ihnen schien zu funktionieren.
Es scheint also, dass Ihre Verwendung eines SUBQUERY
, um dies zu lösen, ungefähr so gut ist, wie Sie bekommen könnten. Ich würde Ihnen wärmstens empfehlen einen Fehler zu programmieren , der Ihre Erwartungen detailliert beschreibt und Ihnen erklärt, warum Sie denken, dass dies funktionieren sollte.
Ich glaube, Sie können nil
in der Abfrage nicht verwenden. Sie sollten vielleicht NULL
oder das Formatzeichenfolge-Konstrukt wie "ANY conditions.terrain == %@", nil
verwenden.
Was mich verwirrt ist, dass Ihre Unterabfrage funktioniert ...
Das obige ist nicht korrekt, da NULL
und NIL
austauschbar verwendet werden können.
Stattdessen wird die NSExpression-Klassenreferenz gibt genau dein Muster (mit @count
) als bevorzugtes Beispiel an.
Haben Sie überprüft, ob die Terrainbeziehung optional ist?
Tags und Links nspredicate core-data