2009-10-03 6 views
4

J'ai une vue de table avec une recette. L'utilisateur peut ajouter et supprimer une recette. Lorsqu'une recette est cliquée, une autre vue de table est poussée et affiche les ingrédients. Pareil ici, l'utilisateur peut ajouter et supprimer des ingrédients.Obtenir le nombre d'objets dans une relation de données de base

Il existe une relation unique entre la recette et les ingrédients.

Je veux afficher le nombre d'ingrédients dans la rangée table de recette. Je sais comment tout mettre en place dans l'interface constructeur avec les lignes, mais je ne sais pas comment obtenir le nombre d'ingrédients pour une seule recette.

Est-ce possible?

Répondre

1

Il suffit de faire une recherche pour tous les ingrédients, avec un prédicat qui permet toutes les correspondances. Ce NSFetchRequest renverra un NSArray, lorsqu'il est exécuté. Il suffit de faire un [myArray count] pour obtenir le nombre d'ingrédients.

+0

Isnt que trop de travail (création d'objet ect) juste pour obtenir le compte? – Surya

+0

Il existe peut-être d'autres moyens d'accéder au magasin de données sans créer d'objets. S'il vous plaît poster des alternatives. Je suis moi-même curieux. –

+1

En fait, voici une question SO sur le sujet même: http://stackoverflow.com/questions/1134289/cocoa-coredata-effiecient-way-to-count-entities –

11

Utilisez countForFetchRequest au lieu de executeFetchRequest et (pour les banques SQL sauvegardées) il effectuera COUNT au lieu d'un SELECT.

10

Si vous utilisez des données de base, vous pouvez simplement demander aux ingrédients liste combien ingrédients qu'il a à l'intérieur en appelant la méthode de comptage:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    int count = [recipe.ingredients count]; 
    return count; 
} 

Vous pouvez savoir quelles sont les propriétés et méthodes de la classe de collection a par en regardant le NSSet class in the documentation.

j'ai découvert quelle classe à regarder en regardant la classe générée que les données de base crée:

@class ParentObject; 
@interface ParentObject : NSManagedObject 
{ 
} 
@property (nonatomic, retain) NSString * name; 
@property (nonatomic, retain) NSSet* childObjects; 
@end 
+1

Puisque l'OP a déjà l'objet de recette, c'est la réponse la plus facile. –

Questions connexes