HurkNburkS HurkNburkS - 1 year ago 71
Objective-C Question

How to fetch a single object from Coredata using a predicate

I am trying to fetch a single object from my coredatabase, however it keeps returning null. My method is based off another method which returns every value from the coredata object that I am accessing..

I have never tried this before and have tried reading apples documents but its just not making sense.. this is what my method looks like

- (NSMutableArray *)readSelectedInstall:(NSString *)projIDString {
NSManagedObjectContext *context = [self managedObjectContext];

if (context == nil) {
else {

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"InstallProject" inManagedObjectContext:context];
[fetchRequest setEntity:entity];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ProjID==%@", projIDString];
[fetchRequest setPredicate:predicate];

NSError *error;

NSMutableArray *installProjectDictionaryArray = [[NSMutableArray alloc] init];

NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
for (InstallProject *installProj in fetchedObjects) {

NSMutableDictionary *tempInstallProjectDictionaryArray = [[ NSMutableDictionary alloc] init];

[tempInstallProjectDictionaryArray setObject:installProj.companyName forKey:@"CompanyName"];
[tempInstallProjectDictionaryArray setObject:installProj.projNo forKey:@"ProjNo"];
[tempInstallProjectDictionaryArray setObject:installProj.projID forKey:@"ProjID"];

[installProjectDictionaryArray addObject:tempInstallProjectDictionaryArray];

return installProjectDictionaryArray;
return nil;

any help getting me to return a single item thats projID matches the projIDString would be greatly appreciated.

Answer Source

Import NSManagedObject(InstallProject) and fetch one object like this,

-(InstallProject *)readSelectedInstall:(NSString *)projIDString

    NSArray *fetchedObjects;
    NSManagedObjectContext *context = [self managedObjectContext];
    NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
    NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"InstallProject"  inManagedObjectContext: context];
    [fetch setEntity:entityDescription];
    [fetch setPredicate:[NSPredicate predicateWithFormat:@"(ANY ProjID contains[cd] %@)",projIDString]];
    NSError * error = nil;
    fetchedObjects = [context executeFetchRequest:fetch error:&error];

    if([fetchedObjects count] == 1)
    return [fetchedObjects objectAtIndex:0];
    return nil;  

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download