Kerndaten, NSPredate, ANY key.path == nil

8

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?

    
Amy Worrall 02.11.2012, 10:57
quelle

2 Antworten

24
  

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:

%Vor%

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.

    
Dave DeLong 02.11.2012, 17:56
quelle
0

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?

    
Mundi 02.11.2012 11:14
quelle

Tags und Links