I have an NSFetchRequest
which is returning the objects' properties in an NSDictionaryResultType
. Is it possible to also get the objects' ObjectId within this dictionary? Otherwise I will need to run the query with a return type of NSManagedObjectResultType
which is much slower for a large number of returned items.
Yes you can, using the very nifty but badly-documented NSExpressionDescription
class. You need to add a properly-configured NSExpressionDescription
object to the array of NSPropertyDescription
objects you set via setPropertiesToFetch:
for your NSFetchRequest
.
For example:
NSExpressionDescription* objectIdDesc = [[NSExpressionDescription new] autorelease];
objectIdDesc.name = @"objectID";
objectIdDesc.expression = [NSExpression expressionForEvaluatedObject];
objectIdDesc.expressionResultType = NSObjectIDAttributeType;
myFetchRequest.propertiesToFetch = [NSArray arrayWithObjects:objectIdDesc, anotherPropertyDesc, yetAnotherPropertyDesc, nil];
NSArray* fetchResults = [myContext executeFetchRequest:myFetchRequest error:&fetchError];
You should then have a @"objectID"
key in the the dictionaries you get back from your fetch request.