2

NSArray私は以下のように定数を宣言しました。

static NSArray* const myArray = [NSArray arrayWithObjects:@"obj1",@"obj2",@"ibj3",@"obj4",@"obj5",nil];

ただし、「イニシエーター要素はコンパイル時定数ではありません」というエラーが表示されます。だから私はこのように宣言しましたが、エラーが発生しました。

この事件を助けてください。

ありがとう。

4

4 に答える 4

7

はヒープ割り当てオブジェクトであるためNSArrays、静的コンテキストで作成することはできません。変数を宣言して、メソッドで初期化できます。

だから、あなたはこのようにすることができます:-

static NSArray *myStaticArray = nil;

- (void) someMethod
{
  if (myStaticArray == nil)
  {
    myStaticArray = [[NSArray alloc] init...];
  }
}

それがあなたを助けることを願っています..

于 2013-01-07T13:52:13.160 に答える
4

これを使用して問題を解決できない理由がわかりません。は不変であるため、100% 定数であり、 100% 静的でもあります。NSArray


GlobalConstant.hファイル:

#import <Foundation/Foundation.h>

// EDITED : __unused static NSArray *_myGlobalArray;

@interface GlobalConstant : NSObject

+ (NSArray *)myGlobalArray;

@end

GlobalConstant.mファイル:

#import "GlobalConstant.h"

@implementation GlobalConstant

+ (NSArray *)myGlobalArray {

    static NSArray *_myGlobalArray = nil; // EDITED

    @synchronized (_myGlobalArray) {
        if (_myGlobalArray == nil) {
            _myGlobalArray = [NSArray arrayWithObjects:@"1", @"2", nil]; // here is your array...
        }
        return _myGlobalArray;
    }
}

@end

...そして、あなたの配列は、GlobalConstant.hファイルを含むすべてのクラスで利用可能になります。次のように配列にアクセスできます

NSArray *_globalArray = [GlobalConstant myGlobalArray];
于 2013-01-07T16:03:41.163 に答える
3

静的配列を作成するには、initializeメソッドを利用できます。これは、すべてのクラスが持つ特別なクラス メソッドです。クラスが何らかの方法で初めて参照され、クラス内の他のコードが実行される前に呼び出されます。

static NSArray* myArray = nil;

@implementation SomeClass

+ (void)initialize {
    if (self == [SomeClass class]) {
        myArray = @[ @"obj1", @"obj2", @"obj3", @"obj4", @"obj5" ];
    }
}

// rest of methods

@end
于 2013-01-07T14:29:42.877 に答える
0

そして、タイピングを節約するために、あなたは使用することができますNSArray* myArray = @[ @"obj1", @"obj2", @"ibj3", @"obj4", @"obj5" ];

于 2013-01-07T14:03:13.653 に答える