3

私は既存のiOSアプリ(誰かが興味があればApp StoreでMazinと呼ばれています)で作業しています。アプリケーションデリゲートまたは情報/方法を共有するためのシングルトン。特に、私は、特定のビューとコントローラ間で共有するために、次のしている:NSManagedObjectConttextとcurrentMazeType、ゲームモードなどのいくつかの場所で使用されるデータ Objective-C ApplicationDelegateまたはsingletonを使用してデータを渡す代わりに

  • 州のプロパティと対話するための関連するカスタム・メソッドのような

    • CoreDataオブジェクトを、そして沿ってsoundIsMutedアプリ全体で一般的に使用される情報を表示するために使用されるゲームに特定のいくつかの広く使用するユーティリティメソッドを持つ
    • ビューおよび方法(例えば、ActivityIndi​​catorおよび方法は、特定のビューの上に表示/非表示にする)

    一般に、いくつかのビューとViewControllerはこの情報のさまざまなサブセットにアクセスする必要があり、これらのオブジェクト全体で情報とメソッドを「グローバルに」共有するためのメカニズムが必要です。 (例えば、基本的な動作インジケータを表示するたびに、私は共通の "startActivityIndi​​cator"メソッドを呼び出します)必要なものもいくつかあります(たとえば、gameModeを変更するとグローバルに変更されます)。共通モード情報にアクセスする必要があります)。

    どのようなパターンがこの要件に最も適していますか?私は自分のソリューションを念頭に置いています。私はあなたの配慮/コメントのためにそれを下に掲載します。

    ありがとうございます!

  • +1

    質問を投稿してから8時間が経過するまで、私自身の回答を投稿するには十分な評判はないが、朝に投稿する。一般的には、共通データ/メソッドを保持するユーティリティクラスを作成し、アプリケーションデリゲートが各ユーティリティクラスの1つのインスタンスのみを作成し、デリゲートが適切なメンバオブジェクト(依存関係など)に渡すようにしますそれらを子オブジェクトへの依存として、など)。私自身の質問に答えることができるときの詳細。 – FTLPhysicsGuy

    答えて

    2

    ソリューション:

    私は、それぞれが「グローバル」の情報および/または方法の適切なサブセットをカプセル化することを、いくつかの「ユーティリティ」クラス(例えばGameDataUtil、AppStateUtil、GadgetsUtil)を作成する予定。ユーティリティの共通情報/メソッドにアクセスする必要がある各ViewまたはViewControllerは、その特定の型の適切なプロパティを持ちます(たとえば、サウンドが現在ミュートされているかどうかを判断するためにサウンドをAppStateUtilにアクセスする必要があるビュー) 。

    ApplicationDelegateは、 "ユーティリティ"クラスの単一インスタンスを生成し、それらのインスタンスをNibからロードされる適切なオブジェクト(applicationDidFinishLaunching内)に渡す唯一のクラスになります。これらのビュー/コントローラは、プログラム的にロードできるメンバに必要な情報を渡す必要があります(クラスAは決してクラスAのインスタンスに渡すために、クラスAにはGagetsUtilが必要です)ユーティリティを直接使用します)。

    これは、アプリケーションデリゲートからの依存関係の注入(Dependency Injection Containerのユーティリティがないため)のようなものです。

    ここで、他のユーティリティごとに1つのプロパティを保持するuber-utility(たとえばConfigUtil)を作成することを考えました。AppDelegateは、uber-utilityのインスタンスを1つ作成します(作成する他のユーティリティのインスタンスで設定します)。 AppDelegateは、基本ユーティリティのいずれかにアクセスする必要があるすべての人にuber-utilityインスタンスを渡します。各基本ユーティリティは共通データ/メソッドのサブセットをカプセル化しますが、それぞれのユーティリティの1つをuber-utilityに入れて渡すことで、どのクラスがどのユーティリティを必要としているかを把握する必要はありません(自身の使用だけでなく、メンバーオブジェクトのいずれかに渡すこともできます)。

    その計画に関する考えや提案はありますか?ありがとうございます!

    +0

    真剣に?私は他のポストで提案されている正反対のものを見てきました。あなたが質問をしていないので、あなた自身の質問に答えないでください。あなたはコメントを求めています。私は私の質問をし、他の人が解決策を提案することを願っていますこれは私の現在のソリューションに対する考え方であり、他の人がコメントしたり全く異なる答えを出すことができます。 – FTLPhysicsGuy

    +0

    あなたの言っていることが分かります。コメントありがとう。私はそれを解決策として見ていました(例えば、誰かが来て質問を読んだり、自分の状況に有益だと思って解決策を見たいと思っていたら、私の記事はおそらく解決策です)。しかし、フィードバックも探しているので、編集が適切な場所を知ることができます。 – FTLPhysicsGuy

    +0

    @FTLPhysicsGuy今私はここで別の答えでプログラムをリフロする手段を詳述したことを覚えています - 私の更新された答えのリンクです。 – justin

    0

    NSNotificationは、そのモデルから一歩離れており、実装が簡単です。

    現在、変更可能なグローバルデータを知り、参照している場合は、元に戻すには時間がかかります。

    更新

    私はa more detailed response to a similar scenario here at SOを書かれていたことを思い出しました。私が検討しています

    +0

    返事をありがとう。私はアプリで通知を使用しています。通常、モデルが変更されたときにコントローラに通知します。たとえば、設定が変更されたときにオブジェクトがアクションを起こす必要がある場合は合理的な解決策です。しかし、コントローラが設定自体を変更する必要がある場合は、明らかにより直接的なアクセスが必要です。また、コントローラが変更が発生したときにアクションを実行する必要はなく、将来のある時点で設定の現在の値を知る必要がある場合は、通知が正しい答えではない可能性があります。 – FTLPhysicsGuy

    関連する問題