2010-11-23 26 views
1

Disons que j'ai une entité Core Data appelée Person. Comment aurais-je un NSArray de Personnes dont les propriétés correspondent à certaines valeurs? Pour exemple, quelqu'un d'un certain âge, la taille ou du poids ... ou quelqu'un avec une dont la hauteur, le poids et l'âge sont des valeurs spécifiques ...L'utilisation de NSPredicate pour obtenir un tableau d'objets de données de base?

Puis-je utiliser un NSPredicate comme ceci:

NSPredicate *pred = 
[NSPredicate predicateWithFormat: 
@"(age == 25) OR (height_in_cms == 185) OR (age == 30 AND height_in_cms == 170 AND weight_in_kgs == 80)"; 
// All properties are NSNumber 

Répondre

1

Je ne suis pas un expert sur la syntaxe pour predicateWithFormat:, mais vous avez l'essentiel de base. Vous pouvez trouver des détails sur le format dans le Predicate Programming Guide d'Apple. Si vous vous demandez quoi faire avec le prédicat une fois que vous l'avez, voici un extrait qui vous montre les étapes:

// Create a fetch request. 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 

// Set the entity for the fetch request. 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"EntityName" inManagedObjectContext:managedObjectContext]; 
[fetchRequest setEntity:entity]; 
[entity release]; 

// Set the predicate for the fetch request. 
[fetchRequest setPredicate:predicate]; 

// Perform the fetch. 
NSError *error; 
NSArray *array = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; 
[fetchRequest release]; 

Si vous voulez que les résultats soient triés, vous pouvez passer un tableau de descripteurs de tri à la demande d'extraction en utilisant setSortDescriptors: avant d'exécuter l'extraction.

1

Vous pouvez suivre la déclaration donnée si vous avez ces valeurs dans une variable. [FetchResults filterUsingPredicate: [NSPredicate predicateWithFormat: @ "âge ==% i OU hieght ==% i ET poids ==% i", âge, taille, poids]];

Et aussi votre approche est correcte en cas de valeurs spécifiques, mais votre déclaration ayant erreur de syntaxe afin de maintenir la syntaxe correcte