NSMutableArray не заполняется до того, как его нужно загрузить - PullRequest
1 голос
/ 26 января 2012

Я пытаюсь настроить простой движок 2D-плиток на основе Mac, используя 2D NSMutableArray для картографирования.Я использую подкласс NSViewController со ссылкой на объект карты (который содержит указанный массив) и передаю запросы рисования для данных тайла через него на карту в интересах поддержания целостности MVC.Однако мое приложение, похоже, не заполняет массив объектами до того, как мой код drawRect начинает срабатывать.

Каждый раз, когда я запускаю это приложение, как написано, мое окно не загружается, и я получаю сообщение об ошибке "- [__ NSArrayMobjectAtIndex:]: индекс 0 за пределами пустого массива "в отладчике.Насколько я могу судить, мой массив должен быть полностью инициализирован нулями до того, как представление будет фактически отображено или должно быть нарисовано.

Вот метод -loadView из моего подкласса NSViewController:

- (void)loadView
{
    currentMap = [[TestMap alloc] init];
    [super loadView];
}

и вот метод init из моего объекта карты:

- (id)init
{
    dimensions = NSMakeSize(15.0,20.0);
    tileset = [[TestTileset alloc] init];
    map = [NSMutableArray arrayWithCapacity:15];
    for (int i = 0; i == 14; i++)
    {
        NSMutableArray *tempRow = [NSMutableArray arrayWithCapacity:20];
        for (int j = 0; j == 19; i++)
        {
            NSNumber *tempID = [NSNumber numberWithInt:0];
            [tempRow addObject:tempID];
        }
        [map addObject:tempRow];
    }
    return self;
}

Разумное использование точек останова показало, что

[super loadView]

каким-то образом вызывается до того, как init начинает свои циклы for -и, очевидно, мой код drawRect, который должен ссылаться на массив, следует оттуда и быстро терпит неудачу.Должно быть, я что-то делаю не так или не в порядке, но не могу понять, что это может быть.

1 Ответ

2 голосов
/ 26 января 2012

У вас == вместо !=, поэтому ни один из ваших циклов for не выполняется.Я думаю, что петли должны быть следующими:

for (int i = 0; i != 15; i++)
{
    NSMutableArray *tempRow = [NSMutableArray arrayWithCapacity:20];
    for (int j = 0; j != 20; j++)
    {
        NSNumber *tempID = [NSNumber numberWithInt:0];
        [tempRow addObject:tempID];
    }
    [map addObject:tempRow];
}
...