0

我有一个核心数据实体,并且创建了一个 NSManagedObject 子类。假设它在实体“List”中有一个属性“attrib1”。在我的子类中,在某些情况下我想计算 attrib1 的值,在其他情况下我想从数据库中返回值。我试图弄清楚如何从我的方法中返回数据库值。例子:

- (NSString *)attrib1 {
   if (flag) {
       return [self calculateValue];
   } else {
       // return value from core data, ie pass thru, but how?
       // Attempt1:
       return [super attrib1]; // Fails with 'unrecognized selector'
       // Attempt2. Ends up calling this method again, recursion loop
       return [super performSelector:@selector(attrib1)];
   }
}

我应该如何从作为attrib1 的getter 的NSManagedObject 子类方法中检索属性“attrib1”的值。

谢谢

4

1 回答 1

1

首先,最好创建将返回计算值或从数据库中获取它的其他属性——在这种情况下,attrib1 应该保持不变。您还缺少一些 getter 的实现。因此,示例代码应如下所示:

-(NSString *)attrib1 {
    NSString *v;
    [self willAccessValueForKey:@"attrib1"];
    if(flag)
        v=[self calculateValue];
    else
        v=[self primitiveAttrib1];
    [self didAccessValueForKey:@"attrib1"];
    return v;
}

另外,请参阅 Apple 文档:https ://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdAccessorMethods.html 。

于 2012-05-10T10:23:00.080 回答