2013-11-12 3 views
-2

Я пытаюсь создать класс NSObject, который содержит массив, который содержит алфавит. Когда я пытаюсь реализовать массив, я получаю предупреждение о том, что «элемент Initializer не является константой времени компиляции». Я исследовал его, и он имеет какое-то отношение к программе, не зная, какое значение будет использоваться во время компиляции I не знаю, как исправить это с помощью кода, который у меня есть. У меня есть интерфейс и реализация код здесь:Создание NSObject с NSArray

#import <Foundation/Foundation.h> 

@interface Alphabet : NSObject { 
    NSArray *alphabet; 
} 
@end 

#import "Alphabet.h" 

@implementation Alphabet 

NSArray *alphabet = [[NSArray alloc] initWithObjects:@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",@"i",@"j",@"k",@"l",@"m",@"n",@"o",@"p",@"q",@"r",@"s",@"t",@"u",@"v",@"w",@"x",@"y",@"z", nil]; 


@end 
+0

Вы можете использовать свойства и ленивое создание для достижения этого, если вы ищете альтернативный – Roshan

+2

Иерархический алфавитный массив в - (id) init. Взгляните на [«Элемент инициализатора не является константой времени компиляции» почему?] (Http://stackoverflow.com/questions/6143107/compiler-error-initializer-element-is-not-a-compile-time- константа) –

ответ

1

Вы должны инициализировать объекты внутри метода, как -(id)init. Вы можете объявить объекты под @implementation как:

@implementation Alphabet 
{ 
    NSArray *alphabet; 
} 

- (id)init 
{ 
    self = [super init]; 
    if (self) 
    { 
     NSLog(@"init"); 
     NSArray *alphabet = [[NSArray alloc] initWithObjects:@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",@"i",@"j",@"k",@"l",@"m",@"n",@"o",@"p",@"q",@"r",@"s",@"t",@"u",@"v",@"w",@"x",@"y",@"z", nil]; 
    } 
    return self; 
} 

@end 

Если инициализировать объект вне метода, значение этого объекта должно быть записано в исполняемый файл. Таким образом, вы можете использовать только постоянное значение в этом случае. Вы не можете создавать объекты Objective-C, кроме констант, до времени выполнения.

0

Вы можете сделать массив свойства и инициализировать его "ленивый":

@interface Alphabet : NSObject 
@property (nonatomic, strong) alphabet; 
@end 



#import "Alphabet.h" 


@implementation Alphabet { 
    NSArray* _alphabet; 
} 

@synthesize alphabet = _alphabet; 


// getter 
- (NSArray*) alphabet { 
    if (_alphabet == nil) { 
     _alphabet = @[@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",@"i",@"j",@"k",@"l",@"m",@"n",@"o",@"p",@"q",@"r",@"s",@"t",@"u",@"v",@"w",@"x",@"y",@"z"]; 
    } 
    return _alphabet; 
} 


@end 

Примечание:

Заявление

_alphabet = @[@"a",@"b",@"c", ..., @"z"]; 

короткую рука для

_alphabet = [[NSArray alloc] initWithObjects:@"a",@"b",@"c", ..., @"z", nil]; 
Смежные вопросы