【Swift】Core Dataの使い方。フェッチの件数制限、並び替え、開始位置を指定する。(Swift 2.1、XCode 7.2)

2020年6月16日

NSFetchRequestの続き

本記事は、前回記事「フェッチリクエストで取得するデータを絞り込む」の続きである。

前回記事ではフェッチリクエスト実行時に絞り込み条件を指定する方法を説明した。本記事では、その他の指定できるものを紹介する。

 

フェッチ件数を制限する(fetchLimitプロパティ)

指定した件数以上フェッチできないようにする。

例えば、fetchLimitプロパティに2を設定してフェッチリクエストを実行したとき、3件以上のデータがヒットしたとしても2件だけフェッチされるということだ。

実際に試してみよう。

ViewController.swiftの「検索ボタン押下時の呼び出しメソッド」を以下のコードに変更する。フェッチリクエスト実行前にfetchLimitプロパティに2を設定している。

 

以下は実際のプレイ動画。

並び順を指定する(sortDescriptorsプロパティ)

属性とソート順(昇順、降順)を指定してフェッチ結果を並び替える。

以下のコードのように、keyには並び替えの基準となる属性名を指定する。ascendingがtrueの場合は昇順、falseの場合は降順になる。

 

複数の属性を指定できる。以下のコードではprice、publisherの優先順序で並び替えが実施される。

 

大文字、小文字を区別しない

並び替えの比較方法を変更するには、第3引数に比較オプションを設定する。

例えば、A,a,B,b,C,cを並び替える場合、比較オプションを指定しない場合は以下のように大文字と小文字が別のものとして並び替えられるが、

A
B
C
a
b
c

 

以下コードの比較オプションを与えると、

 

大文字、小文字を区別せずに並び替えが行われる。

A
a
B
b
C
c

 

Finderの表示順に並び替える

文字列の1,2,3,11,22,33を並び替える場合、比較オプションを指定しない場合は以下のように先頭1⇒先頭2⇒先頭3の順番で並ぶが、

1
11
2
22
3
33

 

以下コードの比較オプションを与えると、

 

数字の順番に並ぶ。⇒「文字列操作プログラミングガイド(公式DOC)

1
2
3
11
22
33

 

フェッチ開始位置を指定する(fetchOffsetプロパティ)

指定されたインデックス番号から後ろのデータをフェッチする。並び替えを行った場合は、並び替え後のインデックス番号の位置から後ろのデータが取得される。

フェッチオフセットのイメージ

 

では、検証データを以下に変更し、フェッチ開始位置を2、フェッチ件数を5件、比較オプションを「Finderの表示順」にして実行してみよう。

 

フェッチ開始位置、フェッチ件数、比較オプションを指定しなかった場合は以下の表示になる。

比較オプションを指定せずに並び替えた場合

 

ViewController.swiftの「検索ボタン押下時の呼び出しメソッド」を以下のコードに変更する。

 

以下は実際のプレイ動画。並び替えたあとの3件目から5件がフェッチされた。

開始位置を2に設定したのに3件目からフェッチされた理由は、インデックス番号は0から始まるためである。

 

バッチサイズを指定する(fetchBatchSizeプロパティ)

絞り込み条件に適合したデータを一度にフェッチする件数を指定する。

通常は、絞り込み条件に適合したデータはすぐにすべてがフェッチされるが、fetchBatchSizeプロパティに値を設定すると、オブジェクトにアクセスする度に設定した件数ぶんのデータがフェッチされる。

fetchBatchSizeに2を設定した場合

 

fetchBatchSizeプロパティに値を設定してもしなくても動きが変わらないので、本プロパティに関しては検証を行っていない。

大量データをフェッチするときに不要なデータをフェッチしなくても良くなるので、性能の面で力になってくれそうだ。