Skip to content

Instantly share code, notes, and snippets.

@jdriscoll
Created January 3, 2013 19:08
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 jdriscoll/4446090 to your computer and use it in GitHub Desktop.
Save jdriscoll/4446090 to your computer and use it in GitHub Desktop.
Core Data helper categories
//
// NSManagedObject+MAK.h
//
// Created by Justin Driscoll on 2/21/12.
//
#import <CoreData/CoreData.h>
@interface NSManagedObject (MAK)
+ (void)loadSeedsFromPath:(NSString *)path inContext:(NSManagedObjectContext *)context;
+ (NSString *)entityName;
+ (NSArray *)fetchAllInContext:(NSManagedObjectContext *)context;
+ (NSArray *)fetchObjectsInContext:(NSManagedObjectContext *)context sortedBy:(NSArray *)sortDescriptors withPredicate:(NSPredicate *)predicate;
+ (NSUInteger)fetchCountInContext:(NSManagedObjectContext *)context withPredicate:(NSPredicate *)predicate;
+ (id)fetchFirstObjectInContext:(NSManagedObjectContext *)context sortedBy:(NSArray *)sortDescriptors withPredicate:(NSPredicate *)predicate;
+ (id)newObjectInContext:(NSManagedObjectContext *)context;
- (void)deleteObject;
@end
//
// NSManagedObject+MAK.m
//
// Created by Justin Driscoll on 2/21/12.
//
#import "NSManagedObject+MAK.h"
#import "NSManagedObjectContext+MAK.h"
@implementation NSManagedObject (MAK)
+ (void)loadSeedsFromPath:(NSString *)path inContext:(NSManagedObjectContext *)context
{
NSDictionary *seeds = [[NSDictionary alloc] initWithContentsOfFile:path];
NSArray *Entities = [seeds allKeys];
for (NSString *entityName in Entities) {
for (NSDictionary *propertyDictionary in (NSDictionary *)[seeds objectForKey:entityName]) {
NSManagedObject *object = [NSEntityDescription insertNewObjectForEntityForName:entityName
inManagedObjectContext:context];
NSArray *propertyNames = [propertyDictionary allKeys];
for (NSString *propertyName in propertyNames) {
[object setValue:[propertyDictionary objectForKey:propertyName] forKey:propertyName];
}
}
}
}
+ (NSString *)entityName
{
return NSStringFromClass([self class]);
}
+ (NSArray *)fetchAllInContext:(NSManagedObjectContext *)context
{
return [self fetchObjectsInContext:context sortedBy:nil withPredicate:nil];
}
+ (NSArray *)fetchObjectsInContext:(NSManagedObjectContext *)context sortedBy:(NSArray *)sortDescriptors withPredicate:(NSPredicate *)predicate
{
return [context fetchObjectsWithEntityName:[self entityName] sortedBy:sortDescriptors withPredicate:predicate];
}
+ (NSUInteger)fetchCountInContext:(NSManagedObjectContext *)context withPredicate:(NSPredicate *)predicate
{
return [context fetchCountWithEntityName:[self entityName] andPredicate:predicate];
}
+ (id)fetchFirstObjectInContext:(NSManagedObjectContext *)context sortedBy:(NSArray *)sortDescriptors withPredicate:(NSPredicate *)predicate
{
return [context fetchFirstObjectWithEntityName:[self entityName] sortedBy:sortDescriptors withPredicate:predicate];
}
+ (id)newObjectInContext:(NSManagedObjectContext *)context
{
return [context insertNewObjectWithEntityName:[self entityName]];
}
- (void)deleteObject
{
[self.managedObjectContext deleteObject:self];
}
@end
//
// NSManagedObjectContext+MAK.m
//
// Created by Justin Driscoll on 12/16/11.
//
#import <CoreData/CoreData.h>
@interface NSManagedObjectContext (MAK)
- (id)insertNewObjectWithEntityName:(NSString *)entityName;
- (NSArray *)fetchObjectArrayWithRequest:(NSFetchRequest *)request;
- (NSUInteger)fetchCountWithRequest:(NSFetchRequest *)request;
- (NSFetchRequest *)fetchRequestForEntity:(NSEntityDescription *)entity;
- (NSFetchRequest *)fetchRequestForEntityName:(NSString *)entityName;
- (NSFetchRequest *)fetchRequestForEntityName:(NSString *)entityName sortDescriptors:(NSArray *)sortDescriptors andPredicate:(NSPredicate *)predicate;
- (NSArray *)fetchObjectsWithEntityName:(NSString *)entityName sortedBy:(NSArray *)sortDescriptors withPredicate:(NSPredicate *)predicate;
- (id)fetchFirstObjectWithEntityName:(NSString *)entityName sortedBy:(NSArray *)sortDescriptors withPredicate:(NSPredicate *)predicate;
- (NSUInteger)fetchCountWithEntityName:(NSString *)entityName andPredicate:(NSPredicate *)predicate;
@end
//
// NSManagedObjectContext+MAK.m
//
// Created by Justin Driscoll on 12/16/11.
//
#import "NSManagedObjectContext+MAK.h"
@implementation NSManagedObjectContext (MAK)
- (id)insertNewObjectWithEntityName:(NSString *)entityName
{
return [NSEntityDescription insertNewObjectForEntityForName:entityName inManagedObjectContext:self];
}
#pragma mark -
- (NSArray *)fetchObjectArrayWithRequest:(NSFetchRequest *)request
{
NSError *error;
NSArray *results = [self executeFetchRequest:request error:&error];
NSAssert(error == nil, [error description]);
return results;
}
- (NSUInteger)fetchCountWithRequest:(NSFetchRequest *)request
{
NSError *error = nil;
NSUInteger result = [self countForFetchRequest:request error:&error];
NSAssert(error == nil, [error description]);
return result;
}
#pragma mark -
- (NSFetchRequest *)fetchRequestForEntity:(NSEntityDescription *)entity
{
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];
return request;
}
- (NSFetchRequest *)fetchRequestForEntityName:(NSString *)entityName
{
NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:self];
return [self fetchRequestForEntity:entity];
}
- (NSFetchRequest *)fetchRequestForEntityName:(NSString *)entityName sortDescriptors:(NSArray *)sortDescriptors andPredicate:(NSPredicate *)predicate
{
NSFetchRequest *request = [self fetchRequestForEntityName:entityName];
if (sortDescriptors)
[request setSortDescriptors:sortDescriptors];
if (predicate)
[request setPredicate:predicate];
return request;
}
#pragma mark -
- (NSArray *)fetchObjectsWithEntityName:(NSString *)entityName sortedBy:(NSArray *)sortDescriptors withPredicate:(NSPredicate *)predicate
{
NSFetchRequest *request = [self fetchRequestForEntityName:entityName sortDescriptors:sortDescriptors andPredicate:predicate];
return [self fetchObjectArrayWithRequest:request];
}
- (id)fetchFirstObjectWithEntityName:(NSString *)entityName sortedBy:(NSArray *)sortDescriptors withPredicate:(NSPredicate *)predicate
{
NSFetchRequest *request = [self fetchRequestForEntityName:entityName sortDescriptors:sortDescriptors andPredicate:predicate];
[request setFetchLimit:1];
NSArray *results = [self fetchObjectArrayWithRequest:request];
if ([results count] == 0)
return nil;
return [results lastObject];
}
#pragma mark -
- (NSArray *)fetchObjectsWithEntityName:(NSString *)entityName usingPredicate:(NSPredicate *)predicate sortedBy:(NSString *)sortDescriptorKey ascending:(BOOL)ascending
{
NSArray *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:sortDescriptorKey ascending:ascending];
return [self fetchObjectsWithEntityName:entityName sortedBy:@[sortDescriptor] withPredicate:predicate];
}
- (id)fetchFirstObjectWithEntityName:(NSString *)entityName usingPredicate:(NSPredicate *)predicate sortedBy:(NSString *)sortDescriptorKey ascending:(BOOL)ascending
{
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:sortDescriptorKey ascending:ascending];
return [self fetchFirstObjectWithEntityName:entityName sortedBy:@[sortDescriptor] withPredicate:predicate];
}
#pragma mark -
- (NSUInteger)fetchCountWithEntityName:(NSString *)entityName andPredicate:(NSPredicate *)predicate
{
NSFetchRequest *request = [self fetchRequestForEntityName:entityName sortDescriptors:nil andPredicate:predicate];
return [self fetchCountWithRequest:request];
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment