0

编辑:我想我不应该制作这种实例方法,而是让它成为类方法!?另一件事,我将 fetch 方法添加到类 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'

managedObjectContext在调用上述方法之前,我尝试将 AppDelegate 传递给 C 类,必须获取 B 实体并从 C 类传递给 B+Helper 类,但这不起作用。

基本上,我只是希望能够从一个简单的NSObject类或NSManagedObject扩展中进行核心日期查询,即从一个不是UIViewController某种类的类。

在 CI 类中做了如下操作:

B *b = [[B alloc] init];
b.managedObjectContext = self.managedObjectContext;

但后来我收到一个错误,说选择器不存在:

setManagedObjectContext:]: unrecognized selector sent to instance...

我希望这是有道理的?!

4

1 回答 1

0

真的,不要使用实例方法创建类别,您应该将已经编写的方法添加到生成的 B 实体类实现和接口中。

+ (Store *)getBByRef:(NSString *)ref;

它应该可以正常工作。

于 2012-04-12T23:59:23.130 回答