2

グローバル変数を使用して、あるビューコントローラーから別のビューコントローラーへの値にアクセスしています。私が直面している問題は、viewdidload の下でグローバル変数を呼び出すことです。null が返されますが、(ibaction) の下でグローバル変数を使用すると、正常に動作します。

4

1 に答える 1

1

問題は、評価の順序に関係している可能性があります。問題の変数は、の時点では初期化されていませんがviewDidLoad:、アクションが実行されるまでに初期化は完了しています。

以降に発生する別のコールバックからグローバルにアクセスしてタイミングを調整することもできますviewDidLoad:が、問題を完全に回避するには、グローバル変数の代わりにグローバルシングルトンを使用できます。グローバル状態を保持する別のクラスを作成し、それを使用する必要がある場所にヘッダーを含め、そのクラスメソッドを呼び出してグローバル変数にアクセスします。

ヘッダ:

@interface Globals
+(MyGlobal*)global;
@end

実装:

@implementation Globals
+(MyGlobal*)global {
    static MyGlobal* _global;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _global = [[MyGlobal alloc] init];
    });
    return _global;
}
@end

使用法:

MyGlobal *g = [Globals global];
于 2012-08-07T13:14:35.377 に答える