コアデータはオブジェクトを遅延ロードし、参照しようとするとすぐにオブジェクトを取り込むことになっています。しかし、私はこのスキームにいくつかの問題を抱えています。コアデータの遅延ロードに関する問題
目的セット内のオブジェクトがまだロードされていないため、関係(セット)内のオブジェクトに対するC 2.0高速列挙が失敗し、コアデータによって管理されるオブジェクトのメンバがタッチされるまでawakeFromFetchは呼び出されません。例えば
、IのようなNSManagedObjectのサブクラスに関係している場合:私はこのような高速の列挙を使用してみた場合、直ちにそのオブジェクトのインスタンスをフェッチした後
@property (retain) NSSet* clips;
を:
for (PClip* clip in self.clips) {
// do something with the clip
}
ループの本体が実行されることはありません。デバッガでは、クリップセット(実行時に_NSFaultingMutableSetのインスタンス)が最初は空であることがわかります。
または私は永続的な状態に由来しているクリップオブジェクトの非永続的なメンバー持っていると言う:
@property (retain) NSString* filename
を私はawakeFromFetch用いた方法でこれを同期させるが、awakeFromFetchは、いくつかの永続的なメンバーになるまで呼び出されませんオブジェクトがロードされる前にこの非永続的な値にアクセスしようとすると、まだ定義されていません(つまり、ゼロになります)。
フェッチ要求に対してsetReturnsObjectsAsFaults:メソッドを使用することは役に立たないようです。フェッチされたオブジェクトに添付されたオブジェクトのツリーのすべてを強制的に取得するようには見えません。
オブジェクトを使用する前にオブジェクトが確実にロードされるようにするにはどうすればよいですか?高速列挙でオブジェクトのセットが読み込まれなかったのはなぜですか?
今後は、「{}」エディターコントロールを使用して、問題のコードを適切にフォーマットしてください。 :-) –