2011-04-12 1 views
0

Disons que j'ai deux entités: Classroom et Student. La salle de classe a une relation avec l'étudiant. Chaque étudiant a une voiture (hascar est 1) ou non (hascar est 0)Deux questions de base sur les données extraites des données de base

Je voudrais créer quelques propriétés extraites Classroom:

  1. nombre d'étudiants qui ont une voiture
  2. nombre d'étudiants

Ce qui me tracasse, c'est la syntaxe. Comment puis-je créer un prédicat qui examine tous les élèves d'une classe donnée?

Merci!

Répondre

3

Vous n'avez pas besoin d'une extraction ou d'une propriété récupérée pour examiner tous les élèves liés à une classe particulière, car la relation trouve les étudiants automatiquement. Supposons que vous ayez un objet ClassRoom particulier, aClassRoom. La clé aClassRoom.students renvoie un NSSet de tous les objets Student associés. Tout ce que vous devez faire est alors d'utiliser les opérateurs de collecte pour obtenir l'information que vous voulez.

Le nombre d'étudiants serait simple:

NSNumber *studentCount=[aClassRoom.students valueForKeyPath:@"@count"]; 

Le nombre d'étudiants avec des voitures:

NSPredicate *p=[NSPredicate predicateWithFormat:@"hasCar==1"]; 
NSNumber *withCars=[[aClassRoom.students filteredSetUsingPredicate:p] valueForKeyPath:@"@count"]; 

Si vous avez une relation, vous ne jamais pas besoin d'un fetch pour trouver quelque chose à propos des objets dans cette relation.

+0

C'est fantastique. J'étais en train d'analyser la situation. C'est juste ce dont j'avais besoin. Merci. – Chris

+0

En guise de suivi, que se passe-t-il si je veux les utiliser dans un NSPredicate pour filtrer les résultats d'un controlrescounci récupéré? Par exemple, je pourrais vouloir filtrer mes résultats et montrer uniquement les salles de classe où tous les élèves n'ont pas de voiture. – Chris

+0

@Chris - un prédicat comme vous voulez utiliserait probablement l'opérateur 'ANY' sur la relation étudiante. Quelque chose comme: 'ANY students.hasCar == 0' retournerait tous les objets de classe dans lequel au moins un étudiant n'avait pas de voiture. – TechZen

Questions connexes