LoginSignup
5
5

More than 5 years have passed since last update.

CoreDataを扱う上で必要なオブジェクト

Last updated at Posted at 2013-05-22

CoreDataの扱いについて数ヶ月間ずっと悩み続けたので、その内容について超ざっくりと書きます。

Master-Detail Applicationのプロジェクトをベースにしたときに、画面遷移先のTableViewControllerやViewControllerで必ず用意しないといけないものが以下の3つです。

  • NSManagedObject
  • NSManagedObjectContext
  • NSFetchedResultController

上の3つのオブジェクトがTableViewControllerにあれば、とりあえずは動くはずです。
例えば、画面が遷移する際には、渡す元のTableViewControllerのprepareForSegue: sender:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    [[segue destinationViewController] setManagedObject:managedObject];
    [[segue destinationViewController] setFetchedResultsController:self.fetchedResultsController];
    [[segue destinationViewController] setManagedObjectContext:self.fetchedResultsController.managedObjectContext];
}

などと書いて、それぞれオブジェクトを渡します。
ここで渡す先のTableViewControllerヘッダーには

@property (strong, nonatomic) id managedObject;
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController;

としてプロパティを宣言しているものとします。

簡単に解説すると、NSManagedObject(エンティティがクラスになったもの)を使うには単体じゃダメで、必ずNSManagedObjectContextを用意しておかないといけないのです。
ついでにNSFetchedResultsControllerがあると、TableViewにデータを渡すのが楽になるのです。

CoreDataの習得にあたって、最初は誰もがMaster-Detail Applicationのプロジェクトから始めると思います。
プロジェクトをつくってビルドすると、まあ当たり前ですが普通に動くので、「これをベースにいじっていったら楽勝じゃん?」とか思うんですよね。
ほんでいじったら急に動かなくなって、検索しても解決が出てこなくて、挫折して諦めるわけです。

私の場合はCoreDataに加えてTableViewについても初めて触れたため、ドツボにはまりました。
最終的にいろいろな解説を読んでようやく理解しましたが、大事な部分は上記の通りで、単純です。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5