Skip to content

Instantly share code, notes, and snippets.

@mpurbo
Created March 5, 2013 01:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mpurbo/5087295 to your computer and use it in GitHub Desktop.
Save mpurbo/5087295 to your computer and use it in GitHub Desktop.
Generic methods for fetching rows from table using Core Data.
- (NSArray *)fetchRecordsForEntity:(NSString *)entityName
{
return [self fetchRecordsForEntity:entityName orderBy:nil];
}
- (NSArray *)fetchRecordsForEntity:(NSString *)entityName orderBy:(NSString *)column
{
NSError *error = nil;
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext]];
if (column != nil) {
[request setSortDescriptors:[NSArray arrayWithObjects:
[NSSortDescriptor sortDescriptorWithKey:column ascending:YES],
nil]];
}
NSArray *results = [managedObjectContext executeFetchRequest:request error:&error];
[request release];
if (error != nil) {
NSLog(@"Error fetching data: %@", [error localizedDescription]);
}
return results;
}
- (NSArray *)fetchRecordsForEntity:(NSString *)entityName havingValue:(id)value forColumn:(NSString *)column
{
NSError *error = nil;
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext]];
NSString *predicateFormat = [NSString stringWithFormat:@"%@ == %%@", column];
[request setPredicate:[NSPredicate predicateWithFormat:predicateFormat, value]];
NSArray *results = [managedObjectContext executeFetchRequest:request error:&error];
[request release];
if (error != nil) {
NSLog(@"Error fetching data: %@", [error localizedDescription]);
}
return results;
}
- (NSArray *)fetchRecordsForEntity:(NSString *)entityName havingValuesForKeys:(NSDictionary *)valuesForKeys
{
NSError *error = nil;
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext]];
NSMutableArray *subpredicates = [NSMutableArray array];
[valuesForKeys enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
NSString *predicateFormat = [NSString stringWithFormat:@"%@ == %%@", key];
NSPredicate *subpredicate = [NSPredicate predicateWithFormat:predicateFormat, obj];
[subpredicates addObject:subpredicate];
}];
[request setPredicate:[NSCompoundPredicate andPredicateWithSubpredicates:subpredicates]];
NSArray *results = [managedObjectContext executeFetchRequest:request error:&error];
[request release];
if (error != nil) {
NSLog(@"Error fetching data: %@", [error localizedDescription]);
}
return results;
}
- (NSManagedObject *)fetchRecordForEntity:(NSString *)entityName havingValue:(id)value forColumn:(NSString *)column
{
NSError *error = nil;
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext]];
NSString *predicateFormat = [NSString stringWithFormat:@"%@ == %%@", column];
[request setPredicate:[NSPredicate predicateWithFormat:predicateFormat, value]];
NSArray *results = [managedObjectContext executeFetchRequest:request error:&error];
[request release];
if (error != nil) {
NSLog(@"Error fetching data: %@", [error localizedDescription]);
}
if ([results count] > 0) {
return [results objectAtIndex:0];
} else {
return nil;
}
}
- (NSManagedObject *)fetchRecordForEntity:(NSString *)entityName havingValuesForKeys:(NSDictionary *)valuesForKeys
{
NSError *error = nil;
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext]];
NSMutableArray *subpredicates = [NSMutableArray array];
[valuesForKeys enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
NSString *predicateFormat = [NSString stringWithFormat:@"%@ == %%@", key];
NSPredicate *subpredicate = [NSPredicate predicateWithFormat:predicateFormat, obj];
[subpredicates addObject:subpredicate];
}];
[request setPredicate:[NSCompoundPredicate andPredicateWithSubpredicates:subpredicates]];
NSArray *results = [managedObjectContext executeFetchRequest:request error:&error];
[request release];
if (error != nil) {
NSLog(@"Error fetching data: %@", [error localizedDescription]);
}
if ([results count] > 0) {
return [results objectAtIndex:0];
} else {
return nil;
}
}
- (NSUInteger)countRecordsForEntity:(NSString *)entityName
{
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext]];
[request setIncludesSubentities:NO]; //Omit subentities. Default is YES (i.e. include subentities)
NSError *err;
NSUInteger count = [managedObjectContext countForFetchRequest:request error:&err];
if (count == NSNotFound) {
count = 0;
}
[request release];
return count;
}
- (NSUInteger)countRecordsForEntity:(NSString *)entityName havingValue:(id)value forColumn:(NSString *)column
{
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext]];
[request setIncludesSubentities:NO]; //Omit subentities. Default is YES (i.e. include subentities)
NSString *predicateFormat = [NSString stringWithFormat:@"%@ == %%@", column];
[request setPredicate:[NSPredicate predicateWithFormat:predicateFormat, value]];
NSError *err;
NSUInteger count = [managedObjectContext countForFetchRequest:request error:&err];
if (count == NSNotFound) {
count = 0;
}
[request release];
return count;
}
- (void)deleteRecord:(NSManagedObject *)record
{
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
[managedObjectContext deleteObject:record];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment