CoreData をちょっとだけ勉強
習得してしまえばCoreDataの方が開発効率がいい、という話をちらほら聞くので、テンプレートから生成されるソースを元にCoreDataってどういうことなのか、を勉強してみました。
30分やって何となくでもわかならいようならあきらめる、ということで。
テンプレート生成
Navigation BasedでUse Core Dataにチェック
xcdatamodeldファイルをみてみる
DB構造がXcodeでそのまま見れるってのはちょっと便利かも。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return [[self.fetchedResultsController sections] count]; }
- fetchedResultsControllerにはDBからフェッチしてきた結果が入っている
- [self.fetchedResultsController sections] で NSArray 型の戻り値が得られるっぽい
- 何がsectionになって何がrowになるのか、どこで指定してるのかはまだピンとこない
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section]; return [sectionInfo numberOfObjects]; }
各要素には NSFetchedResultsSectionInfo に準拠したオブジェクトが入ってるらしい。
- (NSFetchedResultsController *)fetchedResultsController { if (__fetchedResultsController != nil) { return __fetchedResultsController; } NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:self.managedObjectContext]; [fetchRequest setEntity:entity]; [fetchRequest setFetchBatchSize:20]; NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"timeStamp" ascending:NO]; NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; [fetchRequest setSortDescriptors:sortDescriptors]; NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"]; aFetchedResultsController.delegate = self; self.fetchedResultsController = aFetchedResultsController; [aFetchedResultsController release]; [fetchRequest release]; [sortDescriptor release]; [sortDescriptors release]; NSError *error = nil; if (![self.fetchedResultsController performFetch:&error]) { NSLog(@"Unresolved error %@, %@", error, [error userInfo]); abort(); } return __fetchedResultsController; }
まだ30分経ってないけどここで何か心が折れました。レコードとってくる部分なんだろうけど、「おーこりゃ楽そう」って感じが全然しない。。
というわけでまたモチベーションが再燃したらやろうと思います。