1

Employee次のようにして、すべてのエンティティオブジェクトのフェッチを実行するとします。NSArray *employees = [context executeFetchRequest:request error:&error];

次に、次のようにしてクラスにインスタンス変数を設定します。self.allEmployees = employees;

その後、アプリの後半で、従業員オブジェクトにいくつかの変更を加えますが、にアクセスすることはしませんself.allEmployees。別のクラスからそれらを変更しています。

self.allEmployees別のクラスからemployeeオブジェクトに加えた変更に合わせて配列が更新されますか?または、self.allEmployees配列は、最初にフェッチを実行したときの従業員オブジェクトの状態になりますか?(私は後で疑っています)

4

2 に答える 2

1

フェッチから受け取ったオブジェクトを変更し、それらをコピーしない場合は、はい。それらはすべてポインタです。したがって、別のフェッチ要求を実行する必要はありません。

従業員の値を変更しても、ポインタは変更されません。変更されるのは、インスタンス変数またはプロパティだけです。

于 2012-12-17T09:50:34.287 に答える
1

フェッチ要求から返される配列は、ライブ管理対象オブジェクトへの参照を保持します。別のfetchLimitまたはbatchSizeを変更しない限り、クエリがオブジェクトを返すのと同じ数の障害オブジェクトを含む配列を取得します。

これらの障害オブジェクトの1つのプロパティにアクセスすると、CoreDataはすべてのプロパティの実際のデータを透過的に取得し、それらを返します。

管理対象オブジェクトには、最後に保存と呼ばれた独自の最新の値が常にあります。したがって、self.allEmployeesに変更を加える場合は、MOCでsaveを呼び出す必要があります。これにより、他のすべての従業員オブジェクトに変更がブロードキャストされます。

これは、KVOがNSManagedObjectプロパティで機能する理由でもあります。これは、それらに影響を与えるすべての保存された変更が通知されるためです。

于 2012-12-17T09:58:47.350 に答える