Wie kann ich den Klassentyp einer abstrakten Entität in einem NSPredicate kennen?

9

Mit Core-Daten möchte ich einige Daten abrufen. Mein Modell verwendet einige abstrakte Entitäten, siehe angehängtes Bild, wo QuantifiedIngredient eine abstrakte Klasse ist. Ich möchte Ingredient-Entitäten abrufen, die mindestens einen RecipeQuantifiedIngredients enthalten, aber in der Mitte ist QuantificationIngredient, eine abstrakte Klasse.

Wie kann ich das tun? Wie kann ich den tatsächlichen Typ einer abstrakten Klasse innerhalb eines NSPredicates testen? Irgendeine Idee oder Vorschlag?

Der einzige Hinweis, den ich gefunden habe, war: Wie können Sie den Namen der untergeordneten Entität in einem Prädikat für eine Abrufanforderung der übergeordneten Entität referenzieren?

Würde eine benutzerdefinierte Eigenschaft in meinem QuantifiedIngredient funktionieren, um zu wissen, ob es sich um einen RecipeQuantifiedIngredient handelt? Zum Beispiel isRecipeQuantifiedIngredient?

Vielen Dank für Ihre Hilfe.

    
Ricardo 14.06.2012, 15:16
quelle

2 Antworten

1

Ich möchte mir nicht die Zeit nehmen, das in CoreData-speak zu übersetzen, also hier ist mein Gedanke in SQL:

%Vor%

oder so ähnlich. Dies ist im Wesentlichen der Vorschlag von Nikita, eine Flagge zu verwenden, außer dass die "Flagge" die Existenz einer Eigenschaft ist. Ich weiß nicht, wie CoreData reagieren wird, wenn ich mit GroceryQuantifiedIngredients konfrontiert werde, die nicht recipe haben. Ich denke, KVO wird eine Ausnahme auslösen. Sie könnten so fett sein, um eine Kategorie hinzuzufügen:

%Vor%

Dies würde natürlich erfordern, dass CoreData alle quantifizierten Bestandteile aufzählt, aber ich nehme an, dass es dies sowieso tun muss, und ein return nil sollte in winzigen Code optimieren. Die andere Überlegung ist, ob sich dies auf den Rest Ihres Codes negativ auswirkt. Sie müssen diesen Anruf tätigen.

Eine andere Idee, die mir in den Sinn kommt, wenn ich dies beende, ist, so etwas zu tun (ich bekomme wirklich jetzt mit meinem Pseudocode los):

%Vor%

Sehen Sie, was ich meine? Ich vergesse, dass CoreData Sie mit einer Art von Cursor spielen kann, wenn Sie mit Prädikaten oder abgeholten Thingamabobbers arbeiten, wenn dies der Fall ist, dann denke ich, dass dies die beste Wahl ist. Jedenfalls ist es Sonntagnachmittag, so dass das Zeug als Übung für den Leser übrig bleibt.

+1 für eine gute Frage.

    
QED 24.06.2012, 20:06
quelle
2

Wenn recipe in RecipeQuantifiedIngredient benötigt wird, könnten Sie versuchen, einen Abruf durchzuführen, der prüft, ob ingredient.recipe vorhanden ist. Ich denke, das wird funktionieren.

Die benutzerdefinierte Eigenschaft, in Form von Flagge, wird auch für Sie arbeiten. Sie müssen es nur festlegen und aufheben, wenn Sie alle recipeQuantifiedIngredient hinzufügen oder löschen.

    
Nikita Pestrov 18.06.2012 10:46
quelle