2010-12-18 6 views
0

私は、さまざまなアプリケーションに使用したいいくつかのエンティティとリレーションシップを持つ汎用モデルフレームワークを持っています。各アプリケーションについて、これらのエンティティの1つに特定の属性セットを定義したいと思います。私は各アプリケーションが基本エンティティの子であるエンティティを定義することができると考えていましたが、子が異なるモデルファイルにある場合、それを行うことはできません。そして、すべての子エンティティを同じモデルファイルに入れると、各アプリのエンティティはすべてのアプリの属性になります。CoreData:異なるプロジェクトの共通基本エンティティとは異なるサブクラス

私の唯一の解決策は、基本エンティティを持ち、その属性を辞書にすることです。次に、各アプリケーションは、辞書の適切な値を検索するプロパティを定義するNSManagedObjectのサブクラスを記述できます。私はこれでperf問題があるかもしれないと思う。

他のアイデア、または私の辞書のアプローチで考えですか?ありがとう!

答えて

1

私がこれを投稿したときに気づいていなかったことは、プログラムでモデルを修正できるということでした。そこで私は各サブプロジェクトでそれをやって、プロジェクト固有の属性でサブテントを追加し始めました。これはしばらくの間、問題を解決しました。

ただし、モデルの移行が問題でした。基本プロジェクトのモデルファイルで何かを変更した場合、自動移行またはマッピングファイルを使用して、サブプロジェクトが作成したデータストアを移行することができると思いました。しかし、サブプロジェクトはモデルを変更するので、古いモデルをロードして変更し、新しいモデルをロードし、変更して、その2つのモデル間でマイグレーションを実行しなければなりませんでした。

すべてが苦しいので、DBスキーマを汎用オブジェクト、属性、値テーブルを使用して、より柔軟なものに変更しました。各サブプロジェクトは、新しい種類のオブジェクトを定義したいデータがあればスローすることができます。

0

私は同じ質問をしていました...私は2つのCDエンティティに共通の属性と機能を定義する基本クラスを持っています。しかし、スーパークラスから値にアクセスしようとすると、エラーが発生します。

ここで私はそれを解決しました。

データモデルを作成し、通常どおりにクラスを生成します。 NSManagedObjectのサブクラスとしてスーパークラスを手作業で作成します。宣言された変数がないことを意味する、生成されたクラスと同じ構造を与えます。数値の場合は@dynamic、NSNumber *を使用します。

それは私のためのトリックでした。

関連する問題