45
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CoreDataの一対多関連(One To-Many Relationship)

Last updated at Posted at 2012-02-14

最初つまづいたのでメモって公開しておく


.xcdatamodeldファイルを編集する

  • Add Entityで親になるモデルと子になるモデルをつくる

  • Relationshipsの部分で+ボタンを押して、それぞれのモデルでお互いへの関連をつくる。親から子への関連は複数形にしておくとわかりやすい

  • Inverse(逆関連)にも、お互いを指定しておく

  • インスペクタを開き、親モデルのRelationshipsの行を選択した状態でTo-Many Relationshipにチェックをつける

  • インスペクタを開き、子モデルのRelationshipsの行を選択した状態でCount Minimum, Maximumを両方1にする

  • TODO: Delete Ruleについても書く


モデルのクラスを定義する

  • NewFileから、左側の一覧でCoreDataを選び、NSManagedObject subclassを選択する
  • Nextを押して、前項で編集していた.xcdatamodeldであることを確認し、生成する

これで自動的に、.xcdatamodeldで定義した親子関係を持ったNSManagedObjectが作られる


関連付けして保存する部分

親モデルに、関連定義した子を追加(関連付け)するための便利メソッドが生成されているのでそれを使う
クラスメソッドとインスタンスメソッドを混同してコールすると変なことになるので変数名のつけ方に注意

        // 親 Modelを生成
        Photo *photo = [NSEntityDescription insertNewObjectForEntityForName:@"Photo" inManagedObjectContext:self.managedObjectContext];

        for (UILabel *label in [imageView subviews]) {
            // 子 Modelを生成
            Label *labelData = [NSEntityDescription insertNewObjectForEntityForName:@"Label" inManagedObjectContext:self.managedObjectContext];
            [labelData setValue:label.text];
            // 子 を 親 Modelに追加
            [photo addLabelsObject:labelData];
        };

ここではforで一個づつ追加しているが、NSSetになったオブジェクトを一度に追加するメソッドも生成されている

45
45
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
45
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?