1

Core Data を使用したプリフェッチについて正しく理解しているかどうかを確認しようとしています。MBDate プロパティと 1 対 1 の関係にある Message オブジェクトに対して、batchSize を 20 に設定してフェッチ リクエストを実行しています。このプロパティをプリフェッチします。

[fetchRequest setRelationshipKeyPathsForPrefetching:
           [NSArray arrayWithObjects:@"date", nil]];

次の出力に示すように、プリフェッチ コマンドが実行されます。

CoreData: annotation: Prefetching with key 'date'.  Got 9 rows.
CoreData: annotation: total fetch execution time: 0.0094s for 20 rows

ただし、最初のバッチだけで

if(message.date.isFault) NSLog(@"isFault");

isFaultプリフェッチしても、常に出力されます。MBDate オブジェクトのいずれかのプロパティにアクセスしようとすると、エラー リクエストが発生します。

CoreData: sql: SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZDATE, t0.ZDATESTRING FROM ZMBDATE t0 WHERE  t0.Z_PK = ? 
CoreData: annotation: sql connection fetch time: 0.0008s
CoreData: annotation: total fetch execution time: 0.0014s for 1 rows.
CoreData: annotation: fault fulfilled from database for : 0x85d22b0 <x-coredata://736D04C4-7DB3-40B7-B208-79B5DFD68260/MBDate/p61>

プリフェッチが行われないのはなぜですか? オブジェクトがまだエラーになるのはなぜですか? 明確な答えを出すのは難しいと思いますが、ヒントやアイデアは素晴らしいでしょう!

4

1 に答える 1