1

私のプロジェクトには、サーバーから表示するオブジェクトがいくつかあります。それらをFooと呼びましょう。Fooフィードを取得したら、それらをRemoteFooというNSMutableDictionaryサブクラスに解析し、これらのRemoteFooオブジェクトをアプリ全体に渡してデータを表示します。

ユーザーがRemoteFooをダウンロードしたい場合は、FooというコアデータNSManagedObjectエンティティを作成し、RemoteFooの値を使用してインスタンス化します。これはすべて機能します。

私が抱えている問題は、RemoteFooとFooでメソッドを実行する場合、RemoteFoo.mとFoo.mの両方でそれを複製する必要があるということです。また、重複したinitでいっぱいの場合、私のアプリは次のようになります。

- (id)initWithFoo:(Foo *)foo;
- (id)initWithRemoteFoo:(RemoteFoo *)foo;

ユーザーがローカルに保存したFooを表すコアデータFooエンティティから一時的なリモートRemoteFooを分離しながら、このコードの重複をすべて回避するにはどうすればよいですか?

4

3 に答える 3

3

クラスクラスターのようなものを使用することを考えましたか?

http://seanmurph.com/weblog/make-your-own-abstract-factory-class-cluster-in-objective-c/

    --------- Foo --------          NSManagedObject
    |                    |                 |
RemoteFoo             LocalFoo ------ CoreDataFoo 
于 2010-01-29T19:42:15.923 に答える
2

すべてのRemoteFooをFooとして保存し、それらを操作することができます。別の動作が必要な場合は、Fooにリモートかどうかを示す属性を設定できます。

于 2010-01-29T19:09:13.037 に答える
1

CoreDataモデルを次のように変更します。1つのFooインスタンスを使用し、デフォルトでNOに設定したブール属性isRemote(または同様のもの)を追加します。リモートオブジェクトをダウンロードするときは、それらをFoo管理対象オブジェクトとしてインスタンス化し、isRemote属性をyesに設定します。

このように、ローカルとリモートのFooオブジェクトを明確に区別する機能を維持しながら、アプリ内の1つのインスタンスのみを処理する必要があります。アプリでこれが許可されている場合は、isRemote属性を一時的なものとして宣言することもできます。これにより、isRemote属性がディスクに保存されることはなく、メモリにのみ保存されます。この情報を保持する必要がない場合は、これが最善の方法である可能性があります。

于 2010-01-29T19:31:38.627 に答える