Я пытаюсь создать NSArray с группировкой строковых литералов, однако я добираюсь, ошибка компиляции "Элемент инициализатора не является постоянной".
NSArray *currencies = [NSArray arrayWithObjects:@"Dollar", @"Euro", @"Pound", nil];
Кто-то мог указать на то, что я делаю неправильно и возможно объясняю сообщение об ошибке?
Это проблема не с самим созданием NSArray (вы получите ту же ошибку, если напишете [NSArray array]
вместо этого), а с тем, куда вы его записали. Я предполагаю, что это глобальный или файлово-статический NSArray. В языке C переменная такого типа должна иметь постоянный инициализатор - то есть не вызов функции (или, в крайнем случае, вызов метода). Решение состоит в том, чтобы поместить фактическое создание и присвоение массива в метод, который будет вызван до того, как вам понадобится массив, например initialize
.
В этом коде нет ничего плохого. Вы уверены, что ошибка возникает в этой строке?
Похоже, Чак заметил проблему. Однако при кодировании вашего решения вы должны помнить об одной вещи: вы захотите избежать хранения автоматически освобождаемого экземпляра NSArray в статической переменной. Кроме того, обычным шаблоном для таких ситуаций является написание метода класса, который создает и возвращает значение, хранящееся в статической переменной, примерно так:
+ (NSArray *)currencies
{
static NSArray *_currencies;
// This will only be true the first time the method is called...
//
if (_currencies == nil)
{
_currencies = [[NSArray alloc] initWithObjects:@"Dollar", @"Euro", @"Pound", nil];
}
return _currencies;
}
Я новичок в objective-c, но думаю, что правильный код такой:
NSArray *currencies = [[NSArray alloc] initWithObjects:@"Dollar", @"Euro", @"Pound", nil];
Я не уверен.