2011-01-10 12 views
2

CoreDataと一般的なエンティティに関するヘルプが必要です。私の質問の目的のために、私はアルバムのデータベースを持っていると言うことができます。私は単純に名前、アーティスト、年、アルバムアートなどの属性を持つアルバムという名前のエンティティを持っています。複数のエンティティを使用したCoreDataプログラミング

今、このアルバムの曲を作成できるようにしたいとします。私は歌のために別のエンティティを持っていて、それと1対多の関係があるべきだと思っています。しかし、私はそれをどうやって行うのか正確にはわかりません。

私は別の曲を含む異なるアルバムを持っているので、アルバムAからアルバムBの曲を分離したいと思います。今、曲データベースにそのアルバムが属している行がありますが、これを行う方法。アルバム名が重複している場合はどうなりますか?私は作成された時間と名前を使用してアルバム名のユニークな "ハッシュ"を作成しようとしましたが、より良い方法があります。

また、アルバムを削除したときに削除を処理するためのより良い方法が必要です。

1対多の関係を使用せずに、私はリンクされていない2つの別個のエンティティ、アルバムと曲を作成することができました。しかし、新しいアルバムを作成すると、新しいViewControllerがロードされ、タイムスタンプされた「ハッシュ」のアルバム名がViewControllerに渡されます。次に、新しい曲を作成すると、タイムスタンプ付きのアルバム名がSongsエンティティの行として使用されます。そうすれば、どの曲がアルバムに入っているのかを見ると、ハッシュタイムスタンプを含むクエリだけを表示するようにNSPredicateを設定します。ただし、削除は関係がないため問題になります。

  1. 「1対多の関係」を使用する必要がありますか?
  2. 曲が特定のアルバムに属しているかどうかを判断するにはどうすればよいですか?
  3. 名前が同じ複数のアルバムの場合はどうなりますか?
  4. 削除はどのように処理しますか?

誰でもこれらの回答、コード、またはチュートリアルを提供できる場合は、非常に感謝しています。

答えて

3

ので、うまくいけば、この短い答えはトラックにあなたを取得します:

1対多の関係がalbum->曲に適しています。それを作成する方法については、「アルバム」と、「曲」という2つのエンティティがあるとします。 XCodeのデータモデルウィンドウで、「アルバム」エンティティを選択し、新しい関係を作成します(プロパティテーブルの+ボタンを押します)。

名前を付けて、オプションであるかどうかを決めます(アルバムごとに少なくとも1つの曲が必要です)。「曲」を宛先エンティティとして選択します。最後に、「To-Manyリレーションシップ」とマークされたチェックボックスをクリックします。以上です!

これで、関係を確立したので、アルバムに関連付けられている曲は、アルバム自体を削除すると削除されます。

質問3について:「同じ名前のアルバムが複数ある場合はどうなりますか?これはかなり一般的なシナリオです。あなたの主要な識別子として英語の文字列を使用することは非常に珍しいことです。各アルバムに一意のIDを設定したい場合は、これがプライマリ/ユニークキーになります。それが何であるか混乱している場合は、Core Dataを使用する前に、より基本的なデータベースの概念を調べてより良い処理を行う必要があります。

+0

ありがとうございました。 To-Manyリレーションシップを使用していた場合、アルバムエンティティから直接どのように曲にアクセスできますか?その関係を使用して曲のエンティティのデータを取得および設定する方法または方法がありますか? – Sonny

+0

関係はエンティティのプロパティです。他のプロパティと同様に扱うことができます。管理対象オブジェクトのNSSetを使用して取得/設定できます。アップルのこのガイドは、あなたを助けるかもしれません:http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/CoreData/Articles/cdRelationships.html%23//apple_ref/doc/uid/TP40001857-CJBDBHCB – lxt