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 のゲッターである NSManagedObject サブクラス メソッド内から属性「attrib1」の値を取得するにはどうすればよいですか。

ありがとう

4

1 に答える 1

1

まず、計算された値を返すか、データベースから取得する他のプロパティを作成することをお勧めします。この場合、attrib1 はそのままにしておく必要があります。また、ゲッターの実装がいくつかありません。したがって、サンプル コードは次のようになります。

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

また、Apple doc: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdAccessorMethods.htmlも参照してください。

于 2012-05-10T10:23:00.080 に答える