Home > Articles > Home & Office Computing > Mac OS X

Like this article? We recommend

Like this article? We recommend

NSPredicate

What if instead of retrieving every instance of an Entity I just need those instances with a specific attribute. For instance, if the ExampleEntity listed above had an attribute called state which is an Integer and I wanted to find all of the entities that had a state of zero, I would alter the code above as follows:

NSManagedObjectContext *context = [[NSApp delegate] managedObjectContext];
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"state == 0"];
NSEntity *entity = [NSEntityDescription entityForName:@"ExampleEntity"
   inManagedObjectContext:context];
[request setEntity:entity];
[request setPredicate:predicate];
NSError *error;

NSArray *result = [context executeFetchRequest:request error:"error];
NSAssert(result != nil, 
   ([NSString stringWithFormat:@"Error fetching entity: %@", error]));

The only change from the previous example is the addition of a NSPredicate to the NSFetchRequest. The NSPredicate is similar in functionality to the where clause of a SQL query. It is possible to create compound predicates as well as simple ones. By utilizing predicates it is possible to retrieve exactly the entities needed by the application.

InformIT Promotional Mailings & Special Offers

I would like to receive exclusive offers and hear about products from InformIT and its family of brands. I can unsubscribe at any time.