.-- --

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
スポンサー広告 comment(-) trackback(-)
.19 2009

CoreData について (5)

Tasaki です。

CoreData の紹介もついに 5 回目に突入しました。
今まで、これだけシリーズ化したテーマはなかったので、ちょっと食傷気味なところもありますが、がんばっていきたいと思います。

今回は、ついに(といいますか、やっと)データベースからのデータの読み出しについて解説します。

手始めに、登録されたデータをある属性について降順で取得した配列を返すメソッドを作成してみます。

データの読み出しは、以下の流れで行います。
①エンティティの指定
②受信要求の作成
③ソート順序の指定
④受信要求の実行
⑤配列からデータを表示

なお、今回も MyData エンティティを使用したサンプルコードを示します。

まずエンティティの指定ですが、これには以下のメソッドを使用します。
+ ( NSEntityDescription *) entityForName:( NSString *) name inManagedObjectContext:( NSManagedObjectContext *) context;

name には、エンティティ名を context には、管理オブジェクトコンテキストを指定します。

次の受信要求の作成については、alloc - init で行います。
この後で、エンティティを指定するんですが、これには以下のメソッドを使用します。
- ( void ) setEntity:( NSEntityDescription *) entity;

この引数として、「エンティティの指定」で紹介したメソッドの返り値を与える訳です。

ソート順序の指定には、以下のメソッドを使用します。
- ( void ) setSortDescriptors:( NSArray *) sortDescriptors;

これは、データベースから得られたデータ配列の順序を決めるために行いますが、複数の条件を設定できるように引数は配列で与えるようになっています。
今回は1つの条件のみでソートするので、要素数1の配列を作成しここへ渡します。
肝心のソートディスクリプタの作成には次のメソッドを使用します。
- ( id ) initWithKey:( NSString *) keyPath ascending:( BOOL ) ascending;

keyPath には、属性名を与えます。 2番目の引数は、昇順ソートなら YES、降順ソートなら NO を渡します。

受信要求の実行には、以下のメソッドを使用します。
- ( NSArray *) executeFetchRequest:( NSFetchRequest *) request error:( NSError **) error;

request には、作成した受信要求を与えます。2番目の引数は、以前にも登場したエラーオブジェクトへのポインタです。
このメソッドの返り値は要求の結果となっており、エラーが発生した場合は nil となります。

以上で、コーディングに必要なメソッドの紹介は終わりました。
一連のサンプルコードを以下に示します。
- ( NSMutableArray *) showData:( NSManagedObjectContext *) managedObjectContext {
NSMutableArray *results = nil;
if( managedObjectContext != nil ) {
  // ローカルDBから位置情報を取得
  NSFetchRequest *request = [[ NSFetchRequest alloc ] init ];
  NSEntityDescription *entity = [ NSEntityDescription entityForName: @"MyData" inManagedObjectContext: managedObjectContext ];
  [ request setEntity: entity ];
  // 値の大きい順に降順ソート
  NSSortDescriptor *sortDescriptor = [[ NSSortDescriptor alloc ] initWithKey: @"floatValue" ascending: NO ];
  NSArray *sortDescriptors = [[ NSArray alloc ] initWithObjects: sortDescriptor, nil ];
  [ request setSortDescriptors: sortDescriptors ];
  [ sortDescriptor release ];
  [ sortDescriptors release ];
  NSError *error;
  results = [[ managedObjectContext executeFetchRequest: request error: &error ] mutableCopy ];
  if( mutableFetchResults == nil ) {
   // エラー対処
  } else {
   [ results autorelease ];
  }
  [ request release ];
 }
return results;
}


関連記事
スポンサーサイト

Comment

Post comment

  • comment
  • secret
  • 管理者にだけ表示を許可する

Trackback

trackbackURL:http://appteam.blog114.fc2.com/tb.php/55-fff95a6e

ブログ内検索

関連リンク

製品情報

最新記事

カテゴリ

プロフィール

neoxneo



NEXT-SYSTEM iOS Developers Blog


  • UTO:
    カナダ版iPhone4Sは、マナーモードでシャッター音がならない…


  • Ehara:
    ...


  • Hayate:
    ...


  • Tasaki:
    Developer登録完了...したのはいいけど


  • Ueda:
    ...



リンク

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。