2012/06/25更新

[XCODE] CoreDataを用いてデータ管理を行う方法。検索編!!!!

このエントリーをはてなブックマークに追加            

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

画像




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アプリ開発者の誰かに役立てば更に嬉しい限りです。
今後も色々と情報発信してきます!
最後までお読み頂きましてありがとうございました。






こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。