0

コア データを使用してエンティティを作成し、NSManagedObjectそこからサブクラスを生成すると、次の出力が得られます (.h 内)。

@class Foo;

@interface Foo : NSManagedObject

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSSet *otherValues;

@end

nameただし、私の .m ファイルでは、との値を使用したいと考えていotherValuesます。通常は、いくつかの ivar を作成し、必要に応じてそれらのプロパティを追加するだけです。そうすれば、.m ファイルで簡単にアクセスできます。

このような状況で、これを行うことは受け入れられるでしょうか? ivar を .h ( fornameおよびotherValues) に追加すると、オブジェクトの永続化と取得で異常な動作が発生しますか?

4

1 に答える 1

5

Core Data マネージド オブジェクトの属性にアクセスするためにインスタンス変数を使用しません。

生成された実装ファイルにはステートメントが含まれています

@dynamic name;
@dynamic otherValues;

つまり、Core Data プロパティの getter/setter 関数が動的に作成されます。たとえば、管理対象オブジェクト コンテキストまたは基礎となる永続ストアから値を取得します。

そのため、常にプロパティを使用して属性にアクセスする必要があります。次に例を示します。

Foo *myFoo = [NSEntityDescription insertNewObjectForEntityForName:@"Foo" inManagedObjectContext:context];
myFoo.name = @"test";

または、キーと値の方法を使用できます。

[myFoo setValue:@"test" forKey:@"name"];

参照: 「コア データ プログラミング ガイド」のモデル化されたプロパティ:

Core Dataは、効率的なパブリックおよびプリミティブの get および set 属性アクセサー メソッドを動的に生成します。管理対象オブジェクトのサブクラスでは、インターフェイス ファイルでモデル化された属性のプロパティを宣言できますが、インスタンス変数は宣言しません

于 2012-11-19T10:30:29.777 に答える