2009-05-05 3 views
2

私はここで2,3のアプリを作っています。私は自分の道を知っています。いつも私を混乱させていたのは、グローバル属性にアクセスすること、そしてそれらを設定する最も良い場所がどこにあるかです。私は物事にアクセスする方法とアクセスする方法についていくつか質問があります。最優秀アプリケーション代理実務

アプリケーションデリゲートヘッダーファイルにアクセスする他のファイルにアプリケーションのヘッダーファイルを含める必要がありますか?使用したいビューコントローラがあるとします。ビューコントローラの.hの内部に.hを含める必要がありますか?

@class AppDelegate; 

あなただけ出て入力してデリゲートにアクセスすることができます:

[UIApplication sharedApplication].delegate 

、毎回のか、私が設定することができますか?私はちょうどそれに慣れなければならないものですか?

AppDelegate *delegate; 

そしてinit関数の内部で、その変数にシングルトンインスタンスを置く:または私はそれぞれの.hで私の実装では、以下の設定だろうか?

申し訳ありませんが、これは構造外だったが、私はそれが論理的な問題だと思う人々は遭遇し、解決する問題があります。

+0

どのような種類のグローバル属性ですか?そのようなことは、通常、アプリケーションデリゲートや他の共有構造に常にアクセスすることなく、より良い設計が可能です。 – zoul

+0

私はアプリケーションのデリゲートについて具体的には言及していませんが、別のものをプッシュするビューコントローラを持っていると言います。 – Garrett

+0

コントローラー間でデータを渡すオブジェクト指向の方法は、前のコントローラーが設定できる次のコントローラーでプロパティーを明示的に定義することです。 –

答えて

5

多分あなたはApp Delegateの使い方を再考する必要がありますか?おそらく、あなたはとても良いクラスデザインを作っていないような気がします。

これにかかわらず、簡単にする方法があります。これを必要に応じて使用するだけでinitに入れないでください。

MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 

もちろん、MyAppDelegateは、実際のアプリケーションデリゲートのクラス名で置き換えてください。私がする傾向があるしかし

MYAPPDELEGATE.customProperty = blah; 

+0

そして、自分自身を繰り返さないために、あなたは、のようなので、あなたのデリゲートのクラスメソッドでそのコードを置くかもしれません: +(MyAppDelegate *)applicationDelegate { リターン(MyAppDelegate *)[[のUIApplication sharedApplication]デリゲート]。 } –

0

別の可能性としてはそれを含めた後、あなたのような何かを行うことができますので、アプリデリゲートのヘッダファイルに#defineとして適切にキャストアプリデリゲートの参照を使用するコードを追加することです#defineを使うとコードの補完が混乱するため、Johnが提示した行を書くだけでよいのです。コードの補完は、行を入力するよりも厄介なものです。

また、アプリデリゲートへの参照が大量にある場合は、それらの参照の一部を家に近づけるために再構成することができます。

関連する問題