前回の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 件のコメント:
コメントを投稿