[XCODE] CoreDataを用いてデータ管理を行う方法。検索編!!!!
CoreDataを用いたデータ管理。今回は、永続化しているデータを検索する
方法を記載したいと思います。CoreData関連の記事は今回でいったん、最終回(*゚▽゚)ノ

今回の検索を行う為には、準備編で作成するNSManagedObjectContextが必要ですので、 そちらも参照頂けると幸いです(((o(*゚▽゚*)o)))
- CoreDataを用いてデータ管理を行う方法。準備編。
- CoreDataを用いてデータ管理を行う方法。登録編!!
- CoreDataを用いてデータ管理を行う方法。更新・削除編!!!
- CoreDataを用いてデータ管理を行う方法。検索編!!!!
どのような条件で、どんな順で検索するのかを指定し、検索クエリを事項します。
検索条件の指定のところで色々と条件を指定できるので、柔軟な検索が可能です。
以下がサンプルコードとなります。
上記で永続化したデータから条件を指定した検索が出来ました。
検索条件を指定するところ(NSPredicate)は、色々と指定できるようです。詳しくは、 Predicate Programming Guideを参考にしてみて下さい。
iOS Core Data チュートリアル
Core Data プログラミングガイド
無事に一通り知識の整理ができて、ブログとしてアウトプットできて良かったなぁ(*゚▽゚)ノ
この記事が、iPhoneアプリ開発者の誰かに役立てば更に嬉しい限りです。
今後も色々と情報発信してきます!
最後までお読み頂きましてありがとうございました。

CoreDataを用いたデータ管理
この記事も含めて、以下のような分類でCoreDataの使い方をブログに書いています。今回の検索を行う為には、準備編で作成するNSManagedObjectContextが必要ですので、 そちらも参照頂けると幸いです(((o(*゚▽゚*)o)))
- CoreDataを用いてデータ管理を行う方法。準備編。
- CoreDataを用いてデータ管理を行う方法。登録編!!
- CoreDataを用いてデータ管理を行う方法。更新・削除編!!!
- CoreDataを用いてデータ管理を行う方法。検索編!!!!
CoreDataで保持するデータを検索する
検索処理は、今までの登録や更新とは違い、少しだけ処理が増えます。どのような条件で、どんな順で検索するのかを指定し、検索クエリを事項します。
検索条件の指定のところで色々と条件を指定できるので、柔軟な検索が可能です。
以下がサンプルコードとなります。
// NSFetchRequestは、検索条件などを保持させるオブジェクトです。
// 後続処理では、このインスタンスに色々と検索条件を設定します。
NSFetchRequest *fetchRequest = [[NSFetchRequestalloc] init];
// 検索対象のエンティティを指定します。
NSEntityDescription *entity
= [NSEntityDescription entityForName:@"Setting" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
// 一度に読み込むサイズを指定します。
[fetchRequest setFetchBatchSize:20];
// 検索結果を保持する順序を指定します。
// ここでは、keyというカラムの値の昇順で保持するように指定しています。
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"key" ascending:YES];
[fetchRequest setSortDescriptors:[NSArrayarrayWithObject:sort]];
// 続いて検索条件を指定します。
// NSPredicateを用いて、検索条件の表現(述語)を作成します。
NSPredicate *pred
= [NSPredicate predicateWithFormat:@"key = %@ or key = %@ or key = %@", @"dateFormat", @"dateFormat2", @"dateFormat3"];
[fetchRequest setPredicate:pred];
// NSFetchedResultsControllerを作成します。
// 上記までで作成したFetchRequestを指定します。
NSFetchedResultsController *fetchedResultsController
= [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:context
sectionNameKeyPath:nil
cacheName:nil];
// データ検索を行います。
// 失敗した場合には、メソッドはfalseを返し、引数errorに値を詰めてくれます。
NSError *error = nil;
if (![fetchedResultsController performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
// 検索結果をコンソールに出力してみます。
// fetchedObjectsというメソッドで、検索結果一覧を配列で受け取れます。
NSArray *moArray = [fetchedResultsController fetchedObjects];
for (int i = 0; i < moArray.count; i++) {
NSManagedObject *object = [moArray objectAtIndex:i];
NSString *key = [object valueForKey:@"key"];
NSString *value = [object valueForKey:@"value"];
NSLog(@"key=%@, value=%@", key, value);
}
上記で永続化したデータから条件を指定した検索が出来ました。
検索条件を指定するところ(NSPredicate)は、色々と指定できるようです。詳しくは、 Predicate Programming Guideを参考にしてみて下さい。
参考資料
以下を参考資料にブログを記載しました。ありがとうございました☆iOS Core Data チュートリアル
Core Data プログラミングガイド
最後に
CoreDataについて知識が曖昧だったので、準備編から検索編まで、調べたり実装したりしながら書いてきました。無事に一通り知識の整理ができて、ブログとしてアウトプットできて良かったなぁ(*゚▽゚)ノ
この記事が、iPhoneアプリ開発者の誰かに役立てば更に嬉しい限りです。
今後も色々と情報発信してきます!
最後までお読み頂きましてありがとうございました。






