Objective-c – Fastest way to check if an object exists in Core Data or not

core-dataiphoneobjective c

I want to see if an object is persisted in Core Data or not. For example, I have Friends in Core Data, and I identify them by firstName. I can query core data to see if "George" is known. If the result set array contains more than zero objects, I know George is there. But Core Data loads the whole thing into memory, and I actually just want to know if George is stored or not.

How would I do it the most efficient way?

Best Answer

Setup a Core Data request and, instead of actually issuing the query, do the following:

NSError *error = nil;
NSUInteger count = [managedObjectContext countForFetchRequest:request
                                                        error:&error];
if (!error) {
    return count;
} else {
  return 0;
}

In practice, the method countForFetchRequest:error: returns the number of objects a given fetch request would have returned if it had been passed to executeFetchRequest:error:.


Edit: (by Regexident)

As Josh Caswell correctly commented, the correct way to handle errors is either this:

if (count == NSNotFound) {
    NSLog(@"Error: %@", error);
    return 0;
}
return count;

or this (without error logging):

return (count != NSNotFound) ? count : 0;
Related Topic