1

そのため、データがどこに送られ、アプリケーションのどこに保存されるかについて混乱が生じています。これは特定の質問ではないので、誰かが一般的な答えを提供できることを願っています。

いくつかのインスタンス間でいくつかのデータを渡す必要がありUIViewControllerます。現在、dataManagerと呼ばれるシングルトンオブジェクトを使用してこれを行っています。このクラスには、という1つのメソッド、というクラスメソッドが+ (LCDataManager *) sharedDataManagerあり、そのメソッドは基本的に、すでに存在するかどうかをチェックし、sharedDataManager存在する場合はそれを返し、存在しない場合は作成して変数を設定します。つまり、複数のクラスから、好きな場所でそのクラスを参照したり、好きな場所でその変数にアクセスして変更したりできます。

最初の質問:これは、このようにデータを渡すための正しい/最良/最も適切な手段ですか?私はそれがMVCに準拠していることを望んでおり、そのように感じています。私が正しいことを願っています。

2番目の質問:インスタンスメソッドをそのクラスに配置し、クラスメソッド内から呼び出す場合はどうなりますか?メソッドを呼び出してsharedDataManager、その変数の1つ(配列)のオブジェクトを取得し、それらを別の配列に配置してから、それを再度送信する必要があるとします。できませんね。それを回避する方法は何ですか?(共有インスタンスを使用するのではなく)そのクラスのインスタンスを作成すると、複数のviewController間でそのインスタンスを使用できなくなります。

私はひどく混乱しています、そしてそれは私がそれを作っている問題ではないようです。ガイダンスに感謝します。できれば「Appleのドキュメントを読んでください」というものではありません。彼らはあなたが何をしているのかをすでに知っているかのように書いていますが、率直に言って私はまだしていません。

4

4 に答える 4

3

これは、このようにデータを渡すための正しい/最良/最も適切な手段ですか?

LCDataManagerのインスタンスが1つしかないことには何の問題もありませんが、シングルトンパターンを使用すると潜在的な問題が発生します。別の方法は、1つのLCDataMangerを初期化し、それを必要な場所に渡すことです。

そのクラスにインスタンスメソッドを配置し、クラスメソッド内から呼び出す場合はどうなりますか?

アクセサ+ (LCDataManager *) sharedDataManagerはインスタンスのみを返す必要があります。私はあなたが欲しいものは次のようなものだと思います

+ (LCDataManager *)preparedDataManager {
    LCDataManager *shared = [self sharedDataManager];
    [shared doSomeInstanceMagic];
    return shared;
}

- (void)doSomeInstanceMagic {
    // magic!
    // grab some objects one of its variables (an array),
    // and put them in another array
}
于 2013-02-21T15:25:40.117 に答える
3

最初の質問:これは、このようにデータを渡すための正しい/最良/最も適切な手段ですか?私はそれがMVCに準拠していることを望んでおり、そのように感じています。私が正しいことを願っています。

あなたのデザインは完全にMVCに準拠しています。

2番目の質問:インスタンスメソッドをそのクラスに配置し、クラスメソッド内から呼び出す場合はどうなりますか?

確かにインスタンスメソッドを定義して、次のように呼び出すことができます。

[[MyModelClass sharedModel] myInstanceMethod];

確かに、のインスタンス[MyModelClass sharedModel]提供します(シングルトンであるため、一意であることが保証されている必要があります)。MyModelClass

sharedModelクラスメソッドからインスタンスメソッドを呼び出したい場合はsharedModel、シングルトンへの参照を所有しているため、それを行うこともできます。これにより、シングルトンにメッセージを送信できます。

于 2013-02-21T15:26:22.163 に答える
1

Matthijs Hollemansは、ビュー コントローラーを相互に通信させる正しい方法について、彼のブログで 3 部構成の優れたチュートリアルを公開しています。

于 2013-02-21T15:34:09.430 に答える
0

この開発アーキテクチャには問題はなく、iOS開発で使用する必要があります(私は思います)。『IOSプログラミング:ビッグナードランチガイド』の中で、彼らはそれをModel ViewControllerStoreと呼んでいます。

2番目の質問に関しては、はい、インスタンスメソッドを宣言し、から呼び出すことができますsharedDataManager。通常ではないのは、シングルトンクラスの他のインスタンスを作成することですが、それは可能です。

于 2013-02-21T15:21:03.080 に答える