NSArray
私は以下のように定数を宣言しました。
static NSArray* const myArray = [NSArray arrayWithObjects:@"obj1",@"obj2",@"ibj3",@"obj4",@"obj5",nil];
ただし、「イニシエーター要素はコンパイル時定数ではありません」というエラーが表示されます。だから私はこのように宣言しましたが、エラーが発生しました。
この事件を助けてください。
ありがとう。
はヒープ割り当てオブジェクトであるためNSArrays
、静的コンテキストで作成することはできません。変数を宣言して、メソッドで初期化できます。
だから、あなたはこのようにすることができます:-
static NSArray *myStaticArray = nil;
- (void) someMethod
{
if (myStaticArray == nil)
{
myStaticArray = [[NSArray alloc] init...];
}
}
それがあなたを助けることを願っています..
これを使用して問題を解決できない理由がわかりません。は不変であるため、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];
静的配列を作成するには、initialize
メソッドを利用できます。これは、すべてのクラスが持つ特別なクラス メソッドです。クラスが何らかの方法で初めて参照され、クラス内の他のコードが実行される前に呼び出されます。
static NSArray* myArray = nil;
@implementation SomeClass
+ (void)initialize {
if (self == [SomeClass class]) {
myArray = @[ @"obj1", @"obj2", @"obj3", @"obj4", @"obj5" ];
}
}
// rest of methods
@end
そして、タイピングを節約するために、あなたは使用することができますNSArray* myArray = @[ @"obj1", @"obj2", @"ibj3", @"obj4", @"obj5" ];