créer un Composé de Prédicat dans coreData xcode pour iphone
SALUT, je suis en train de travailler sur la base de données avec les 3 entités (Classes,les Élèves,ExamRecord) et de leurs relations :
Class<------>> Students <------> ExamRecord
J'ai créé un prédicat de l'extraction de la liste des élèves d'une classe de 5ème.
NSString * fmt2 = @"studentsToClass.className=%@";
NSPredicate * p2 = [NSPredicate predicateWithFormat:fmt2,@"5th",nil];
avec ce que je reçois tous les élèves de la classe de 5ème
Maintenant, je tiens également à appliquer un autre filtre sur les Étudiants par les cheveux.
Aller chercher les étudiants dont le Dossier de son Examen "résultat", "Pass".le résultat est un attribut d'étudiant en ExamResult entité
Comment puis-je faire usage de Composés de prédicat dans cette ?
S'il vous plaît corrigez-moi si je me trompe
Toute aide sera appréciée
Grâce
OriginalL'auteur sagar | 2013-07-18
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un composé de prédicat:
Ou il vous suffit de combiner les tests avec "ET":
Noter que la liste d'arguments de
predicateWithFormat
n'est pasnil
terminée.Le nombre d'arguments est déterminé par le nombre de spécificateurs de format dans le format
chaîne de caractères.
Merci pour votre aide mais je ne suis pas en mesure de récupérer le résultat pour l'Étudiant.Mon prédicat devient: studentsToClass.className == "5e" ET studentsToExamRecord.résultat == "Pass" s'il vous Plaît aider et corrigez-moi où je me trompe
Ne vous obtenez une erreur ou pas de résultats? Peut-être montrer la façon dont les entités sont définies et la façon dont vous créez les objets. Vous bénéficiez de tous les objets si vous omettez le prédicat?
si je demande studentsToClass.className == "5e puis-je obtenir tous les étudiants d'autre ne sont que des enregistrements
Mais le prédicat semble OK. Êtes-vous sûr que la relation des Élèves aux ExamRecord est réglé? Est la valeur de la "suite" de l'attribut vraiment "Passer" ou pourrait-il être en minuscule?
OriginalL'auteur Martin R
Tout d'abord, vous ne devriez pas vraiment appeler la
student - class
rapportstudentsToClass
. Le nom de la relation devrait refléter ce type d'objet est à l'autre bout.E. g.
Dans ce cas, le
Student
rapport àClass
doit être appeléclass
parce que l'objet il y a un seulClass
entité.La relation inverse ne devrait pas être appelé
classToStudent
il doit être appeléstudents
parce que l'objet est unNSSet
de plusieursStudents
.MODIFIER
Juste à ajouter à cela. Le nom de la relation doit expliquer POURQUOI il est là. Nous pouvons voir que la relation est à partir de la classe de l'élève, mais si vous l'appelez "classToStudent" il n'a pas d'expliquer quoi que ce soit. Aussi, si vous avez un deuxième rapport de la classe de l'élève? Qu'appelez-vous cela. Si vous l'appelez
attendees
oupupils
ouattendingStudents
etc.. il donne la relation de sens.SOLUTION
Dans cet exemple, je vais les appeler comment je pourrais les appeler et vous verrez, cela la rend un peu plus facile à comprendre...
De toute façon...
OriginalL'auteur Fogmeister
Tout d'abord, votre cité prédicat est vraiment déjà mal. Vous devriez référence de l'objet géré, pas sa propriété (c'est à dire de ne pas le
name
de laClass
). Il doit être:Aussi, vous devriez vraiment choisir plus lisible des noms de variables et de la propriété. Donc, pas
fmt2
maisformattingString
. PasstudentsToClass
maisform
("classe" est un mot spécial en objective-C). Vous obtenez l'idée.Donc de votre choix composé de prédicat est fait comme ceci (version courte):
La complexité de la version, si vous vraiment besoin un niveau d'abstraction plus élevé (ce dont je doute):
Qui serait distinct SOF question ;-).
Oui j'ai trouvé ça:) Il est fait en utilisant orPredicateWithSubpredicates:
OriginalL'auteur Mundi
Les prédicats peuvent également être imbriquées à l'aide de composés de prédicats (Pour Swift)
OriginalL'auteur jeet.chanchawat