0

複数のView Controllerでプライベートデータオブジェクトを使用するテストプロジェクトがあります。(Webとgit-hubからダウンロードしました)

- (ExampleAppDataObject*) theAppDataObject;
{
    id<AppDelegateProtocol> theDelegate = (id<AppDelegateProtocol>) [UIApplication sharedApplication].delegate;
    ExampleAppDataObject* theDataObject;
    theDataObject = (ExampleAppDataObject*) theDelegate.theAppDataObject;
    return theDataObject;
}

最初の質問は、theDelegate が AppDelegateProtocol でキャストされたということです。このアプリケーションの UIApplication デリゲート名が ViewControllerDataSharingAppDelegate であったとしても、警告はありません。理由はわかりませんが、それは id タイプだったからでしょうか? (AppDelegateProtocol は、彼が AppDelegate で宣言したカスタム デリゲート プロトコルです。)

第 2 に、すべてのビュー コントローラーでこの種のコードが表示され、1 トンのパターンのように見えます。これがView Controller間でデータを転送する最良の方法ではないと思います。オブジェクトのデータ型を転送する最良の方法はどれですか?

ありがとう。

4

1 に答える 1

1

プロトコルを作成すると、コードが特定の実装から多少切り離されます。それぞれ独自のカスタム クラスをアプリ デリゲートとして使用する複数のアプリケーションを使用することも考えられますが、すべての実装は AppDelegateProtocol に準拠しています。

初めて iOS を使い始めたとき、アプリ デリゲートを使用してグローバル データとメソッドを保持していました。

ただし、これによりアプリ デリゲートがアプリ固有のコードで埋められます。

私は最近、そのアプローチから離れて、データ コンテナー シングルトンを使用します (おそらくユーティリティ メソッド シングルトンも使用します)。データを格納するために必要に応じてシングルトンにプロパティを追加し、クラス メソッドを使用してシングルトンへのポインターを取得します。シングルトンを遅延ロードするクラス メソッドを作成します。

NSCoding に準拠させることで、データ コンテナーのシングルトンを永続化することも簡単です。次に、バックグラウンドに移動するたびに、シングルトンをどこかに保存してください。アプリの起動時に、それを読み込んでください。

于 2013-09-12T18:42:22.933 に答える