2012-03-23 1 views
0

コアデータエンティティごとに明示的なカスタムID属性をPKとして設定する必要がありますか?コアデータが独自のobjectID column for every entityを使用していることを認識しており、[NSManagedObject objectID]から取得できます。NSManagedObjectを使用しても安全ですか?objectID:レコードフィルタリング、テーブル結合などのためにPKとして使用しますか?

私の以前のプロジェクトは、生のSQLiteを使用していましたが、今はコアデータに移行しようとしています。現在、私のコアデータのプロトタイプでは、私は私のカスタムのID列使用してレコードをフィルタリングしています:

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"my_id=%d",some_id_value]]; 

興味があるだけに、私は、カスタムID属性で自分を気にする必要があり、または私は内部のObjectID列に依存している必要があります。ここでそれを渡し、フィルタリング、テーブル結合などに使用しますか?

答えて

2

coredataの背後にある全体のアイデアは、低レベルのSQLを避けることです。現代のすべてのORMと同様に、内部オブジェクトIDに悩まされるべきではありません。最初はこれは少し厄介なように見えるかもしれませんが(特に重いSQLの背景から来た場合)、私の考えでは、この方法でオブジェクトグラフを管理する方がはるかに簡単です。だから一番下の行は、あなたのNSManagedObjectsと関係を設計し、coredataはすべてのIDでその魔法をさせる。

+1

これは確かにこの特定の要求に対する良い回答ですが、たとえばIDなどのコアデータオブジェクトを参照する必要があるいくつかの特定の状況があります。たとえば、同期エンジンの作成です。また、Core Dataをマルチスレッド化する方法の中には、スレッド間でオブジェクトIDを渡す必要があるものもあります。つまり、一般的には(クエリー、フェッチなどのために)、IDで作業する必要はありません。 –

+0

@AmyWorrall Tottalyがあなたに同意します。それを明確にしてくれてありがとう。 – Alladinian

+0

ありがとうございます。しかし、オブジェクトを識別子でどのようにフィルタリングする必要がありますか?最も一般的なのは、具体的なオブジェクト(レコード)を取得し、具体的なオブジェクト(レコード)を保存することです。私の現在のコード(setPredicate、my_id)を置き換えることをどのように提案しますか?それでも、テーブルIDにマップされた識別子を持たずに具体的なオブジェクトを更新、選択、削除する方法がわかりません。 – Centurion

関連する問題