2017-06-18 19 views
0

静的クラス変数として、自分のクラスのいくつかの初期イニシャライザ値を保存しています。このように:目的C - NSArray型の静的クラス変数

// List.h 
static NSString *DEFAULT_LIST_NAME = @"Not Set"; 
static BOOL DEFAULT_RECURSION = NO; 

また、NSArray *の静的変数を空の配列に設定する必要があります。これはどのように達成できますか?現在、私はエラーを取得する:

Initializer element is not a compile-time constant

+0

こんにちは 与えられたソリューションを使用することができます

  • うまく動作しますあなた。それを行うにはさまざまな方法があります。 あなたはそれをチェックしたいかもしれません:https://stackoverflow.com/questions/20544616/static-nsarray-of-strings-how-where-to-initialize-in-a-view-controller – wei

  • +0

    @SamBそうするために? – user7802048

    +0

    にエラーのスクリーンショットが表示されます。上記の静的コード行を使用すると、Xcode 8にコンパイルに関する警告やエラーが表示されない –

    答えて

    0

    は、このためのクラスメソッドを定義します。

    .mファイル

    @implementation test 
    static NSArray *array; 
    + (NSArray *)array { 
        if (!array) array = [[NSArray alloc] init]; 
        return array; 
    } 
    @end 
    
    1

    静的変数の値が実際に書かれているので、あなたはコンパイル時エラー"Initializer element is not a compile-time constant"を取得していますコンパイル時に実行可能ファイルに追加します。だから、定数値(実行時に実行されるalloc/initではなく)だけを使うことができます。あなたは

    1. あなたはstatic NSArray *arr = nilを書くことができ、以下のオプションのいずれかを使用して、配列を作成し+initializeを使用することができます。

    2. 別のオプションは、さらに別のオプションは、Objective-Cの++へのObjective-Cからソースファイルの種類を切り替える(または持っている、.mmする.Mからその名前を変更することである__attribute__ ((constructor))

    3. を使用することができます同じ効果)。 C++においては、このような初期化子はコンパイル時の定数値である必要はありませんし、元のコードはまた、あなたがこの質問はに似てPat_Morita

    関連する問題