2013年1月23日水曜日

CoreData データ呼び出しの共通メソッド

前回のCreateに続いてReadの共通メソッド書きます。

ま、こんな感じ。
パラメータにエンティティの名前。そしてSortDescriptorとPredicateとlimitです。
SortDescriptorとPredicateについては他のところでも解説が多いので、そちらをみてください。
気が向いたら書くかもしれませんが。。。

DataManager.m
+(NSArray *)EntityListWithName:(NSString *)entityName  sort:(NSSortDescriptor *)sort
  pred:(NSPredicate *)pred  limit:(int)limit {

//※Moを拡張してます
NSManagedObjectContext* managedObjectContex=[NSManagedObjectContext managedObjectContextForCurrentThread];
    
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    // 取得するエンティティを設定
    NSEntityDescription *entityDescription;
    entityDescription = [NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContex];
    [fetchRequest setEntity:entityDescription];
if(sort!=nil){
        NSArray *sortDescriptors;

        sortDescriptors = [[NSArray alloc] initWithObjects:sort, nil];
        [fetchRequest setSortDescriptors:sortDescriptors];
}else{
        NSArray *sortDescriptors;
        sortDescriptors = [[NSArray alloc] initWithObjects: nil];
        [fetchRequest setSortDescriptors:sortDescriptors];
    }
    
    // 取得条件の設定
if(pred!=nil)[fetchRequest setPredicate:pred];
    // 取得最大数の設定
    if(limit>0)[fetchRequest setFetchBatchSize:limit];
    // データ取得用コントローラを作成
    NSFetchedResultsController *resultsController;
 
    resultsController = [[NSFetchedResultsController alloc]
                          initWithFetchRequest:fetchRequest
                          managedObjectContext:managedObjectContex
                          sectionNameKeyPath:nil
                          cacheName:entityName];  
    // DBから値を取得する
NSError* error = nil;
    if (![resultsController performFetch:&error]) {
        abort();
    }
    NSArray *result = resultsController.fetchedObjects ;
    resultsController=nil;
    managedObjectContex=nil;
    
return result;
}


ちなみにカテゴリ実装でNSManagedObjectに下記を実装してます。
+ (NSManagedObjectContext *)managedObjectContextForCurrentThread {
    return [NSManagedObjectContext managedObjectContextForThread:[NSThread currentThread]];
}


呼び出しで共通メソッド作っておくと、さくっとArrayで返ってくるのでです(^^)

0 件のコメント:

コメントを投稿