2009-05-12 8 views
15

私は3つのビューを持つAppDelegateを持っています。私は私を切り替えるAppDelegateメソッドの参照 - iphone

pinkAppDelegate *appDelegate= (pinkAppDelegate *)[[UIApplication sharedApplication] delegate]; 

[appDelegate switchToSettings]; 

を使用して、アプリのデリゲートでは、3つすべて

[window addSubview:gameViewController.view]; 
[window addSubview:viewSettings.view]; 
[window addSubview:viewController.view]; 
[window makeKeyAndVisible]; 

を追加し、私はViewControllerを内側にしていた場合

[window bringSubviewToFront:gameViewController.view]; 

を呼び出すことで意見を交換するためのいくつかのmethodesを持っていますサブビュー...これまでのところ良い。

私は自分のviewSetting UIViewControllerにいて、同じappDelegate呼び出しを行うと、appDelegateメソッドを呼び出す方法がわからないのと同様に、チョークします。私は私のメイン・ウィンドウXIBに夢中にすべての私の見解を持っているが、私はメインappdelegate

+0

をインポート

[myAppDelegate doSomething]; 

を使用することができますが、 '[[のUIApplication sharedApplication]というMAENくださいデリゲート]; '失敗?または 'switchToSettings'メッセージを送信できないことを確認しますか?このランタイムかコンパイル時ですか? –

+0

実行時間...メッセージを送信できません。 私は1つのビューからはできますが、別のビューからはできません... – jalo

答えて

28

内部のViewControllerのメソッドを通過できない理由を把握することはできません

、あなたはローカル変数を設定していますあなたのアプリケーションデリゲートを指すappDelegateと呼ばれる。この行は次のようになります。

pinkAppDelegate *appDelegate= (pinkAppDelegate *)[[UIApplication sharedApplication] delegate]; 

この変数はviewControllerに対してローカルなので、設定ビューコントローラでは使用できません。そこに別の変数を設定する必要があります。

また、この素晴らしい#defineをアプリ全体で使用してください。 (あなたは、あなたのプロジェクト内のすべてのファイルに含める.Hヘッダーファイルにそれを配置する必要があります。)

#define myAppDelegate (MyAppDelegate *)[[UIApplication sharedApplication] delegate] 

は次に、あなたが行うことができますどこにでも次

[myAppDelegate doSomething]; 
+0

なぜ直接呼び出さないのですか?: [[[UIApplication sharedApplicaion delegate] doSomething] – stefanB

+0

UIApplicationがこれらのカスタムメソッドをとにかく持っていないことを除けば... – stefanB

+0

@stefanBすべての[[UIApplication delegate shared blah blahは醜いです。このソリューションはavoifエラーのように役に立ちますjaloが持っています。 –

1

ジェーンの答えは持っていましたそれのタイプミス。

あなたはすべてのクラスにインポートすること(例えばdefines.h)ヘッダファイルに次の行を使用します。

#define myAppDelegate [[UIApplication sharedApplication] delegate] 

あなたはまた、プレフィックスヘッダファイルに行を使用することができます - これは簡単な方法でありますどこにでもアクセスできます。

は、任意の方法では、次のいずれかを使用することができます。参考のため

[myAppDelegate doSomething]; 
myAppDelegate.property=value; 
myAppDelegate.childClassOfMyAppDelegate.property=value; 
[myAppDelegate.ChildOfMyAppDelegate doSomething]; 
10

はまだ上記のタイプミスがあり、また、私はすべての時間をキャストすることの警告を回避することができます別の追加を持っています。あなたが使用している場合:

#import "MyAppDelegate.h" 
#define myAppDelegate (MyAppDelegate *) [[UIApplication sharedApplication] delegate] 

を私はconstants.hに上記を入れた後、どこでも、私はconstants.h

関連する問題