3

アプリケーション内では、同じNSManagedObjectを共有する必要がある異なるUIViewControllerを持つことができます。私は通常、次の手順を実行している:NSManagedObjectsをUIViewControllerに渡すためのレシピ

customController.productManaged = .... 

一度CustomControllerがそれを解放する責任があり、行わ:私はCustomControllerをistantiateとき

@interface CustomController : UIViewController 

@property (nonatomic, retain) ProductNSManagedObject* productManaged; 

@end 

は、その後、私は次のようにそれを注入。

このアプローチはうまくいきます(正しいかどうかわかりません)が、コントローラがそのオブジェクトを必要とするが、そのオブジェクトを持つコントローラの直接の子ではない場合はどうすればよいでしょうか?例えば

MainController -> ChildController -> SubChildController -> .... 

ここで、MainControllerは管理オブジェクトを有する。

多くの仲介プロパティを作成する必要がありますか、または新鮮なNSFetchRequestなどを実行する必要がありますか?

同じ態様をNSManagedObjectContextに適用することができます。私はそれが存在するアプリケーションデリゲートからコンテクストを取得できることを知りました。しかし、このアプローチは、柔軟性に欠け、マーカス・ザラがpassing-around-a-nsmanagedobjectcontext-on-the-iphoneに書いたように。

提案がありますか?前もって感謝します。

答えて

1

これは非常に一般的な質問です(関連するものについては、hereおよびhereを参照してください)。関連する質問の答えに書いたように、シングルトンから離れてオブジェクトのインスタンス化を処理する別のオブジェクトを作成し、アプリケーション用のオブジェクトグラフを作成する必要があります。この独立したオブジェクトは、すべての共有オブジェクトへの参照を保持し、それらのオブジェクトを構築中のオブジェクトに供給することができるので、他のオブジェクトへの依存として渡すだけのものは参照できません。シングルトンの誤用やさらなる指針、特にMiškoHeveryの記事の詳細については、blog postを参照してください。

私はを作成しました。シングルトンなしでアプリを配線する方法、カップリングを低く抑えて他のシングルトンの問題を解決する方法を示しています。現時点では非常にシンプルですが、後ほど一般的な使用例を追加します。

+0

ご回答いただきありがとうございました。しかし、この別のオブジェクトは、すべての共有オブジェクトへの参照を保持し、それらのオブジェクトを構築中のオブジェクトに供給することができるので、他のオブジェクトへの依存として渡すために、 。*?たぶん、サンプルプロジェクトを作成するときは、私に教えてください。 –

+0

私はあなたの答えを読み終えました。彼らは便利です。アプローチは非常にきれいですが、私が理解できないのは、* Factory * factory = [[Factory alloc] init]; *アプリケーションの中で* istantiedオブジェクト* factoryを参照する方法です。ありがとうございました。 –

+0

編集を見て、サンプルプロジェクトはそれを明確にする必要があります。 – zoul

2

私は、アプリケーション全体で使用される管理オブジェクトコンテキストを含むシングルトンオブジェクトを作成します。このシングルトン内にデータに関連するサポートコード(例えば、永続的なストアコーディネータ)を置いて、ビューとコントローラ情報のすべてをそれから分離しておく。

あるケースでは、別のスレッドの管理オブジェクトコンテキストが必要です。それをリファクタリングし、その文脈を同じシングルトンの中に入れることは有用であることが明らかになりました。次に、シングルトン内で2つのコンテキストのマージを行うことができます。

これは私のコードを管理するのに役立ちました。あなたはそれを検討するかもしれません。

+0

+1しかし** NSManagedObject **オブジェクトはどうですか?あなたはコントローラ間でそれらを渡す正しい方法を知っていますか?ありがとうございました。 –

+0

あなたはそのシングルトン内の管理オブジェクトにアクセスしますか? –

+1

私は一般に、各ビューコントローラに対してフェッチされた結果コントローラを使用します。特定のビューにとって重要な管理オブジェクトを追跡します。取得された結果コントローラは、シングルトンを介してマネージドオブジェクトコンテキストにバインドされます。このようにして、管理されたオブジェクトのコンテキストが任意のビューのアクションによって変更された場合、他のビューにバインドされたfrcは応答し、そのデリゲートメソッドを呼び出すことができます。 – Jim

関連する問題