フェッチの件数制限、並び替え、開始位置を指定する。フェッチの件数制限、並び替え、開始位置を指定する。2020年6月16日NSFetchRequestの続き本記事は、前回記事「フェッチリクエストで取得するデータを絞り込む」の続きである。前回記事ではフェッチリクエスト実行時に絞り込み条件を指定する方法を説明した。本記事では、その他の指定できるものを紹介する。フェッチ件数を制限する(fetchLimitプロパティ)指定した件数以上フェッチできないようにする。fetchLimitプロパティに2を設定してフェッチリクエストを実行したとき、3件以上のデータがヒットしたとしても2件だけフェッチされるということだ。ViewController.swiftの「検索ボタン押下時の呼び出しメソッド」を以下のコードに変更する。フェッチリクエスト実行前にfetchLimitプロパティに2を設定している。//キーボードをしまう。//検索結果配列を空にする。//フェッチリクエストのインスタンスを生成する。//属性nameに検索文字列を含むデータをフェッチ対象にする。//フェッチ件数を2件に制限する。//フェッチリクエストを実行する。//テーブルを再読み込みする。{//キーボードをしまう。testSearchBar.endEditing(true)//検索結果配列を空にする。searchResult.removeAll()//フェッチリクエストのインスタンスを生成する。{//属性nameに検索文字列を含むデータをフェッチ対象にする。testSearchBar.text!)}//フェッチ件数を2件に制限する。{//フェッチリクエストを実行する。{print(error)}//テーブルを再読み込みする。testTableView.reloadData()}以下は実際のプレイ動画。並び順を指定する(sortDescriptorsプロパティ)属性とソート順(昇順、降順)を指定してフェッチ結果を並び替える。以下のコードのように、keyには並び替えの基準となる属性名を指定する。ascendingがtrueの場合は昇順、falseの場合は降順になる。false)]複数の属性を指定できる。以下のコードではprice、publisherの優先順序で並び替えが実施される。false)]大文字、小文字を区別しない並び替えの比較方法を変更するには、第3引数に比較オプションを設定する。"localizedCaseInsensitiveCompare:")]大文字、小文字を区別せずに並び替えが行われる。"localizedStandardCompare:")]数字の順番に並ぶ。⇒「文字列操作プログラミングガイド(公式DOC)」123112233フェッチ開始位置を指定する(fetchOffsetプロパティ)指定されたインデックス番号から後ろのデータをフェッチする。並び替えを行った場合は、並び替え後のインデックス番号の位置から後ろのデータが取得される。検証データを以下に変更し、フェッチ開始位置を2、フェッチ件数を5件、比較オプションを「Finderの表示順」にして実行してみよう。10:00:00"]]フェッチ開始位置、フェッチ件数、比較オプションを指定しなかった場合は以下の表示になる。ViewController.swiftの「検索ボタン押下時の呼び出しメソッド」を以下のコードに変更する。//キーボードをしまう。//検索結果配列を空にする。//フェッチリクエストのインスタンスを生成する。//属性nameに検索文字列を含むデータをフェッチ対象にする。//フェッチ開始のインデックス番号を2に設定する。//フェッチ件数を5件に設定する。//属性nameをFinderの表示順と同じ順番に並び替える。//フェッチリクエストを実行する。//テーブルを再読み込みする。{//キーボードをしまう。testSearchBar.endEditing(true)//検索結果配列を空にする。searchResult.removeAll()//フェッチリクエストのインスタンスを生成する。{//属性nameに検索文字列を含むデータをフェッチ対象にする。testSearchBar.text!)}//フェッチ開始のインデックス番号を2に設定する。2//フェッチ件数を5件に設定する。5//属性nameをFinderの表示順と同じ順番に並び替える。{//フェッチリクエストを実行する。{print(error)}//テーブルを再読み込みする。testTableView.reloadData()}以下は実際のプレイ動画。並び替えたあとの3件目から5件がフェッチされた。開始位置を2に設定したのに3件目からフェッチされた理由は、インデックス番号は0から始まるためである。バッチサイズを指定する(fetchBatchSizeプロパティ)絞り込み条件に適合したデータを一度にフェッチする件数を指定する。通常は、絞り込み条件に適合したデータはすぐにすべてがフェッチされるが、fetchBatchSizeプロパティに値を設定すると、オブジェクトにアクセスする度に設定した件数ぶんのデータがフェッチされる。fetchBatchSizeプロパティに値を設定してもしなくても動きが変わらないので、本プロパティに関しては検証を行っていない。大量データをフェッチするときに不要なデータをフェッチしなくても良くなるので、性能の面で力になってくれそうだ。エンティティごとに出力先の外部ファイルを変える。