diff --git a/Classes/NSManagedObject+ActiveRecord.h b/Classes/NSManagedObject+ActiveRecord.h index 5de1c9f..a65cb74 100644 --- a/Classes/NSManagedObject+ActiveRecord.h +++ b/Classes/NSManagedObject+ActiveRecord.h @@ -60,5 +60,7 @@ #pragma mark - Naming + (NSString *)entityName; ++ (NSEntityDescription *)entity; ++ (NSEntityDescription *)entityInContext:(NSManagedObjectContext *)context; @end diff --git a/Classes/NSManagedObject+ActiveRecord.m b/Classes/NSManagedObject+ActiveRecord.m index 4f22a02..98a5cf0 100644 --- a/Classes/NSManagedObject+ActiveRecord.m +++ b/Classes/NSManagedObject+ActiveRecord.m @@ -185,6 +185,24 @@ + (NSString *)entityName { return NSStringFromClass(self); } ++ (NSEntityDescription *)entity { + return [self entityInContext:[NSManagedObjectContext defaultContext]]; +} + ++ (NSEntityDescription *)entityInContext:(NSManagedObjectContext *)context { + NSString *name = [self entityName]; + NSEntityDescription *entity = [NSEntityDescription entityForName:name + inManagedObjectContext:context]; + if (!entity) // two letter class prefix + entity = [NSEntityDescription entityForName:[name substringFromIndex:2] + inManagedObjectContext:context]; + if (!entity) // three letter class prefix + entity = [NSEntityDescription entityForName:[name substringFromIndex:3] + inManagedObjectContext:context]; + + return entity; +} + #pragma mark - Private + (NSPredicate *)predicateFromDictionary:(NSDictionary *)dict { @@ -240,8 +258,9 @@ + (NSArray *)sortDescriptorsFromObject:(id)order { + (NSFetchRequest *)createFetchRequestInContext:(NSManagedObjectContext *)context { NSFetchRequest *request = [NSFetchRequest new]; - NSEntityDescription *entity = [NSEntityDescription entityForName:[self entityName] - inManagedObjectContext:context]; + NSEntityDescription *entity = [self entityInContext:context]; + + NSParameterAssert(entity); [request setEntity:entity]; return request; }