0

Appdelegateでグローバル変数を定義しています。他のコントローラーで使用したいです。そして、私はこのように使うことができます:

AppDelegate *appDelegate=(AppDelegate *)[[UIApplication sharedApplication]delegate];
  appdelegate.name=[NSString stringwithFormat:@"%@",ename];

しかし、viewControllerでappdelegates変数にアクセスしたい場合は、毎回使用する必要が AppDelegate *appDelegate=(AppDelegate *)[[UIApplication sharedApplication]delegate];あります。これにより、「AppDelgateのローカル宣言はインスタンス変数を非表示にします」などの警告メッセージが表示されます。 ViewController。どうすればこの警告を取り除くことができますか?

編集:

.h :
#import "AppDelegate.h"

@interface More : UIViewController
{

    AppDelegate *appdelegate;
}
.m:
- (void)viewDidLoad
{
    [super viewDidLoad];

    appDelegate=(AppDelegate *)[[UIApplication sharedApplication]delegate]; //error :Use of undeclared identifier appDelegate



}
4

6 に答える 6

1

Appdelegatemakeメソッドで。

+(AppDelegate*)sharedInstance
{
    return (AppDelegate*)[[UIApplication sharedApplication] delegate];
}

次に、コントローラーヘッダーファイルにappdelegateをインポートして、

[AppDelegate sharedInstance]. name = [NSString stringwithFormat:@"%@",ename];;

多分これはあなたを助けるでしょう。

于 2013-02-01T10:03:58.270 に答える
1

編集で指定した投稿コードから、問題はAppDelegate*appdelegateを宣言したばかりのようです。.hで

.mで「appdelegate」の代わりに「appDelegate」を使用しました。

明らかに未定義の変数ですね。

于 2013-12-24T10:07:45.150 に答える
0

問題が単なる警告である場合は、ポインタのローカル名をappDelegateに変更してください。

AppDelegate *myLocalPointerToAppDelegate=(AppDelegate *)[[UIApplication sharedApplication]delegate];
  myLocalPointerToAppDelegate.name=[NSString stringwithFormat:@"%@",ename];
于 2013-02-01T09:51:23.307 に答える
0

AppDelegateそのために、のオブジェクトを使用するクラスに1つのメソッドを作成します。

-(AppDelegate *)appdelegate
{
    (AppDelegate *)[[UIApplication sharedApplication]delegate];
}

そして、AppDelegateそのクラスのオブジェクトを使用したい場所ならどこでも、のように使用できます[self appdelegate].name

于 2013-02-01T09:53:56.823 に答える
0

または、plistファイルにAppDelegateオブジェクトを作成して、すべてのコントローラーで使用することもできます...

于 2013-02-01T12:13:46.220 に答える
0

かなり悪いスタイル:インスタンス変数は常にアンダースコアで始まる必要があります。たとえば、_appDelegateです。インスタンスメソッド内では、インスタンス変数の名前を使用すると、自動的にself->が参照されます。たとえば、インスタンス変数「appDelegate」がある場合に「appDelegate」と書くと、実際にはself->appDelegateを意味します。そのため、警告が表示されます。appDelegateという名前の変数を導入すると、ソースコードで「appDelegate」を使用すると、インスタンス変数ではなくローカル変数が参照されるようになります。それはトラブルを求めています。(「トラブルを起こす」とは、「経験豊富なプログラマーなら誰でも、遅かれ早かれ修正不可能なバグにつながると言うでしょう」という意味です)。変数を追加するだけで、コードの多くの行の意味が変わった可能性があります。

そして、それがまさにコンパイラが警告する理由です。コンパイラは、あなたが最終的に陥る穴を自分で掘っただけだと考えました。

[[UIApplication sharedApplication] delegate]を呼び出してappDelegateを取得する必要があるため、appDelegateまたは_appDelegateという名前のインスタンス変数があることも非常に奇妙です。

于 2014-02-16T22:08:02.003 に答える