3

SO、いくつかのクラスを持つアプリケーションがNSManagedObjectあり、ロジックの一部を抽出して自己完結型のフレームワークに入れ、他のアプリケーションで使用したいと考えています。

私は次のようなクラスを持っています:

Employee
 - firstName             (an MOM property)
 - lastName              (an MOM property)
 - (NSString *)fullName  (a method)
 - (NSUInteger)daysHired (an ObjC property)
 - etc...

フレームワークでこのクラスを提供したいと思っています。これは MOM 定義です。これは、フレームワークに .mom を追加し、そこで Employee を定義し、フレームワークでクラスの .h と .m を構築することで可能になると考えています。このクラスを再利用したい場合は、それをプロジェクトのビルドに含め、フレームワークの .mom をアプリの .mom とマージするだけで、エンティティが利用可能になります。私は推測する?

ただし、フレームワークからエンティティ def/NSManagedObject サブクラスを取得し、それを新しいアプリでサブクラス化または拡張する方法がわかりません。私のアプリとフレームワーク内の抽象的なものとの間の関係を作成するにNSManagedObjectsは、フレームワークのエンティティをサブクラス化する必要があります.1つのMOMファイルのエンティティを別のMOMファイルのエンティティに関連付ける方法がわかりません.スーパークラスまたはリレーションの宛先として。

考え?フレームワークで MOM を提供することは可能ですか?

4

1 に答える 1

4

まさにあなたが説明した理由から、コンパイルされたマネージド オブジェクト モデルでエンティティを拡張するのはかなり厄介です。ご覧のとおり、いくつかのオプションがあります。便利な順に並べてあります。

  • .xcdatamodelコンパイル済みの代わりに未コンパイルを含めます.mom。とにかく、コンパイルされたモデルを持っている人なら誰でも簡単にリバース エンジニアリングを行うことができるので、これによって余分な情報が得られるわけではありません。生のモデルを使用すると、通常どおりサブエンティティを作成できます。既存のエンティティの互換性が心配な場合は、実行時チェックを追加して、Employee期待どおりに見えることを確認します (たとえば、エンティティの説明を確認しますversionHash)。元のフレームワーク モデルが更新された場合、モデルに Xcode 4 以降のファイル形式を使用している場合、変更はきれいにマージされます。
  • コードでサブエンティティを作成します。モデル エディターに魔法はありません。そこで行うことはすべてコードでも実行できます。インスタンスを作成および/または変更してからマネージド オブジェクト モデルNSEntityDescriptionを呼び出すことにより、最初にモデルをロードするときにエンティティを作成および/または変更します。ストア ファイルをロードした後にそうすると例外がスローされるため、永続ストアをロードする前にsetEntities必ず実行してください。
  • (最悪の場合) モデルに一般的なキー値ストア エンティティ タイプを作成し、Employeeエンティティ タイプに対多関係を与えます。その後、新しいサブエンティティを作成しなくても、実行時に必要なキーと値のペアを追加できます。

Core Data は、この種の使用を念頭に置いて設計されたわけではありませんが、それが不可能というわけではありません。私は最初のオプションを自分で使用しますが、他のオプションも機能します。

于 2013-07-01T03:22:32.323 に答える