web-dev-qa-db-ja.com

AppDelegateメソッドの参照-iphone

3つのビューを持つAppDelegateがあります。 3つすべて追加します

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

アプリデリゲートでは、を呼び出すことによってビューを交換するためのいくつかの方法があります

[window bringSubviewToFront:gameViewController.view]; 

ViewController内にいるときは、

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

[appDelegate switchToSettings];

私のサブビューを切り替えるために...これまでのところとても良いです。

しかし、viewSetting UIViewControllerにいて、同じappDelegate呼び出しを行うと、appDelegateメソッドの呼び出し方法がわからないように途切れます。

すべてのビューがメインウィンドウのxibにフックされていますが、メインのappdelegateのメソッドをトラバースできない理由がわかりません。

15
jalo

ViewController内で、アプリデリゲートを指すappDelegateというローカル変数を設定しています。これがこの行の機能です。

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

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

または、アプリ全体でこのニース#defineを使用します。 (プロジェクト内のすべてのファイルにインクルードする.hヘッダーファイルに配置する必要があります。)

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

次に、どこでも次のことを実行できます。

[myAppDelegate doSomething];
28
Jane Sales

参考までに、上記にはまだタイプミスがあります。また、毎回キャストする必要があるという警告を回避するのに役立つ別の追加もあります。使用する場合:

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

上記をconstants.hに入れてから、

[myAppDelegate doSomething];

定数をインポートする場所h

10
agough

ジェーンの答えにはタイプミスがありました。

すべてのクラスにインポートするヘッダーファイル(defines.hなど)で次の行を使用します。

#define myAppDelegate [[UIApplication sharedApplication] delegate]

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

次に、どの方法でも、次のいずれかを使用できます。

[myAppDelegate doSomething]; 
 myAppDelegate.property=value;
 myAppDelegate.childClassOfMyAppDelegate.property=value;
[myAppDelegate.ChildOfMyAppDelegate doSomething]; 
1
Cassie