编辑:对于我认为我不应该创建这种类型的实例方法,而是使其成为类方法!另一件事,我添加了获取方法到C类,它的工作。我只是想,如果可以通过托管对象访问数据存储区,这会很方便,但我认为这有些违背managedObjectContext
背后的想法,持久性等等。核心数据:从类别中取数据(核心类的扩展名)
我不知道如果我正在尝试做一些你不应该做的事,但在这里。
我有一个实体A与实体B(B到许多A)有关系的数据模型。我在数据存储中有许多类型为B的实体,现在我想创建一些类型为A的实体。为了这样做,我需要获得对B类实体的引用,即,我有查询数据存储。我作为一个B类如下,即:现在
#import "B+Helper.h"
@dynamic managedObjectContext;
@implementation B (Helper)
- (Store *)getBByRef:(NSString *)ref
{
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"B" inManagedObjectContext:self.managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"ref == %@", ref];
[request setPredicate:predicate];
NSError *error = nil;
NSArray *storeArray = [self.managedObjectContext executeFetchRequest:request error:&error];
NSInteger bCount = [bArray count];
if (bCount > 1 || bCount == 0) {
// Deal with error...
} else {
return [bArray objectAtIndex:0];
}
}
,问题是,我似乎无法正确设置managedObjectContext ---我得到的错误:
CoreData: error: Failed to call designated initializer on NSManagedObject class 'B'
我试过路过在调用上述方法之前,从AppDelegate到C类的managedObjectContext
必须获取B实体,并从C类到B + Helper类,但这并不奏效。
基本上,我只是希望能够从简单的NSObject
类或NSManagedObject
扩展,即从不是某种类的UIViewController
的类中进行核心日期查询。
在C类我做了如下:
B *b = [[B alloc] init];
b.managedObjectContext = self.managedObjectContext;
但后来我得到一个错误说,选择是不存在:
setManagedObjectContext:]: unrecognized selector sent to instance...
我希望这是有道理的?
类别实际上非常适合与Core Data一起使用,因为如果您必须重新生成类文件,您的方法将不会被清除。你的想法虽然不错,但我只是将该类方法放在类别中。 – sosborn 2012-04-13 00:10:16
从再生的角度来看,分类很棒 – 2012-04-13 00:19:25