From 14339cc0a6e00245784c113b5cd71805a8e71871 Mon Sep 17 00:00:00 2001 From: Florian Buerger Date: Wed, 8 Jan 2014 13:04:02 +0100 Subject: [PATCH 1/3] Try to create entity from classes with class prefixes The entity description fails if the class name doesn't match the entity name (a common problem with class prefixes) This change tries to create the entity from the classname stripping the first two or three letter. --- Classes/NSManagedObject+ActiveRecord.m | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/Classes/NSManagedObject+ActiveRecord.m b/Classes/NSManagedObject+ActiveRecord.m index 4f22a02..199d061 100644 --- a/Classes/NSManagedObject+ActiveRecord.m +++ b/Classes/NSManagedObject+ActiveRecord.m @@ -240,8 +240,22 @@ + (NSArray *)sortDescriptorsFromObject:(id)order { + (NSFetchRequest *)createFetchRequestInContext:(NSManagedObjectContext *)context { NSFetchRequest *request = [NSFetchRequest new]; - NSEntityDescription *entity = [NSEntityDescription entityForName:[self entityName] + NSString *name = [self entityName]; + NSEntityDescription *entity = [NSEntityDescription entityForName:name inManagedObjectContext:context]; + if (!entity) { + // 2 char prefix + entity = [NSEntityDescription entityForName:[name substringFromIndex:2] + inManagedObjectContext:context]; + } + if (!entity) { + // 3 char prefix + entity = [NSEntityDescription entityForName:[name substringFromIndex:3] + inManagedObjectContext:context]; + } + + NSParameterAssert(entity); + [request setEntity:entity]; return request; } From 2ff108f32ad5a62994f7c93f7cfd095dc48afcbe Mon Sep 17 00:00:00 2001 From: Florian Buerger Date: Wed, 8 Jan 2014 13:23:33 +0100 Subject: [PATCH 2/3] Extract +entity method --- Classes/NSManagedObject+ActiveRecord.m | 33 +++++++++++++++----------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/Classes/NSManagedObject+ActiveRecord.m b/Classes/NSManagedObject+ActiveRecord.m index 199d061..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,22 +258,9 @@ + (NSArray *)sortDescriptorsFromObject:(id)order { + (NSFetchRequest *)createFetchRequestInContext:(NSManagedObjectContext *)context { NSFetchRequest *request = [NSFetchRequest new]; - NSString *name = [self entityName]; - NSEntityDescription *entity = [NSEntityDescription entityForName:name - inManagedObjectContext:context]; - if (!entity) { - // 2 char prefix - entity = [NSEntityDescription entityForName:[name substringFromIndex:2] - inManagedObjectContext:context]; - } - if (!entity) { - // 3 char prefix - entity = [NSEntityDescription entityForName:[name substringFromIndex:3] - inManagedObjectContext:context]; - } + NSEntityDescription *entity = [self entityInContext:context]; NSParameterAssert(entity); - [request setEntity:entity]; return request; } From 07d2309089dab72c8729b842d830789ef3247186 Mon Sep 17 00:00:00 2001 From: Florian Buerger Date: Wed, 8 Jan 2014 13:27:04 +0100 Subject: [PATCH 3/3] Make entity convenience methods public --- Classes/NSManagedObject+ActiveRecord.h | 2 ++ 1 file changed, 2 insertions(+) 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