対処法: setFetchBatchSizeを1以上に設定する。
サンプルソースや、XcodeからCore Dataを使用するプロジェクトを作成すると、デフォルトで20が設定されているので、20〜50くらいの範囲に設定するのが望ましいだろう。
TableViewと連動するFetchの場合、スクロール量に応じてsetFetchBatchSizeで設定したデータ件数が読み込みされるので、その都度スクロールがカクカクした動作となり、UXが損なわれるので、いい按配となるようにsetFetchBatchSizeに設定する値を調整する必要がある。
setFetchBatchSizeを明示的に設定しない場合のデフォルト値は0。
Core DataのEntityに設定されているデータがNSStringなどの値であればデータ量は軽めなので、setFetchBatchSizeは0でもさしたる問題とはならないが、EntityにNSDataに変換した画像データを登録している場合、読み込み時間を要してしまい、画面描画するまでに数秒〜数十秒かかるなどしてUXが損なわれる。
この場合は、setFetchBatchSizeを20〜50くらいの範囲に設定することにより、読み込み時間の短縮が図られる。
これは、TableViewと連動するFetchの場合でも、一度に全データを読み込む必要があるFetchでも同様である。
Core DataのEntityに設定されているデータ量がNSStringなどのみで軽めであれば、setFetchBatchSizeを0としていても、読み込み時間は短く、TableViewのスクロール時のカクつきもなくUXも優れたものとなるが、画像データも一緒に登録されているEntityのFetchの場合、読み込み時間を要してしまうため、setFetchBatchSizeを20〜50くらいの範囲に設定するのが望ましい。