-2

私の.mファイルでこの変数を宣言しました

static NSString* MyGlobalPassword;

.mファイルには、NSStringを取得するために別のクラスで呼び出しているクラスメソッドがあります。

    + (NSString *) updateMessageString: (NSString *) msgString
{
    MyGlobalPassword = msgString;

    return MyGlobalPassword;
}

同じクラスのインスタンスメソッドでMyGlobalPasswordにアクセスしたい

 - (void) Access
    {
        NSLog(@"I've retrieved it %@", MyGlobalPassword);
    }

これを行おうとすると、Objective-Cは認識されないセレクターエラーをスローします。インスタンスメソッドでその変数にアクセスさせたくありません。どうすればそれを強制できますか?

4

2 に答える 2

0

.h ファイル内で変数を宣言すると、クラスはそれをインスタンス変数またはプロパティとして受け取ります。そのため、そのオブジェクトからのみアクセスできます。.m ファイル内でその変数「MyGlobalPassword」を宣言します。これで、インスタンス メソッドだけでなく、クラス メソッド内でもその「グローバル」変数にアクセスできるようになりました。

于 2012-09-15T09:08:08.837 に答える
0

静的変数が初期化されていないため、エラーが発生したと思われます。.h ファイルで変数を宣言することは、多くの場所で (追加の作業や頭痛の種なしに) 含めることができないため、一般的にはお勧めできません。おそらく、ヘッダーの宣言を次のように拡張する必要があります。

extern NSString* MyGlobalPassword;

そして、次のように .m で宣言します。

NSString* MyGlobalPassword;

さらに、通常、このようなグローバルを作成したくないでしょう。一度割り当てられて多くの場所で使用されるシングルトン クラスを持つか、これをクラス メンバーにする必要があります。上記をチートして実行することもできますが、.m ファイルで静的にし、クラス アクセサーを追加してどこでもアクセスできるようにします。

于 2012-09-15T07:10:53.903 に答える