Значения массива в приложении Какао - Инициализатор не постоянная ошибка - PullRequest
1 голос
/ 14 января 2011

Я пытаюсь установить массив для программы таймера, которую я пишу в xcode. значения в секундах, и я хочу, чтобы в конструкторе интерфейсов была кнопка, которая запускает таймер с таким количеством секунд. Это структура, которую я пытаюсь объявить, чтобы указать время в файле заголовка .h. это просто массив с двумя массивами в нем, который я могу вызвать с помощью @ CollegeTimes.constructive или что-то подобное.

Заранее спасибо!

- (NSDictionary *)debateTimes;
 id debateTimes = [[NSDictionary alloc] initWithObjectsAndKeys:
 [NSDictionary dictionaryWithObjectsAndKeys:
   @"540", @"constructive",
   @"360", @"rebuttal",
   @"180", @"cx",
   @"600", @"prep",
     nil], @"collegeTimes",
 [NSDictionary dictionaryWithObjectsAndKeys:
   @"480", @"constructive",
   @"300", @"rebuttal",
   @"180", @"cx",
   @"480", @"prep",
     nil], @"hsTimes",
                   nil]; \\error is called here.

Ответы [ 2 ]

4 голосов
/ 14 января 2011

Это структура, которую я пытаюсь объявить, чтобы указать время в файле заголовка .h

Это проблема.Вы не можете создавать постоянные NSDictionary объекты (или большинство других NS объектов, в этом отношении) вне функции.Один из способов сделать то, что вы хотите, был бы следующим:

SomeThing.h

@interface SomeThing : NSObject
{
    ...
}
+ (NSDictionary *)debateTimes;
@end

SomeThing.m

static NSDictionary * staticDebateTimes = nil;
@implementation SomeThing
...
+ (NSDictionary *)debateTimes
{
    if (staticDebateTimes == nil)
    {
        staticDebateTimes = [[NSDictionary alloc] initWithObjectsAndKeys:
          [NSDictionary dictionaryWithObjects:...
    }
    return staticDebateTimes;
}
@end

Этот код теперь будет использоваться внешне следующим образом:

NSDictionary * debateTimes = [SomeThing debateTimes];
2 голосов
/ 14 января 2011

Вы не можете назначить объект target-c переменной вне функции. Когда переменная назначается вне функции, ее значение становится частью исполняемого файла. Поскольку значение указателя на объект не известно до времени выполнения, вы не можете назначить объект, пока он не будет создан. (Константы NSStrings являются исключением из этого, поскольку они также являются частью исполняемого файла)

Лучший способ хранения такой структуры - использовать массив структур c.

typedef struct {
    char *name;

    NSTimeInterval constructive;
    NSTimeInterval rebuttal;
    NSTimeInterval cx;
    NSTimeInterval prep;
} DebateTime;
DebateTime[2] = {{"collegeTimes", 540, 360, 180, 600},
                 {"hsTimes", 480, 300, 180, 480}};

Вы также можете изменить имя и интервалы времени на постоянные строки, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...