NSMutableArray在需要加载之前未被填充

时间:2012-01-25 21:20:58

标签: cocoa nsmutablearray nsviewcontroller loadview

我正在尝试设置一个简单的基于Mac的2D平铺引擎,使用2D NSMutableArray进行映射。我正在使用NSViewController的子类,其中包含对map对象(包含所述数组)的引用,并将tile数据的绘图请求通过它传递给地图,以保持MVC的完整性。但是,在我的drawRect代码开始触发之前,我的应用程序似乎没有用对象填充数组。

每次我按照编写的方式运行此应用程序时,我的窗口无法加载,我在调试器中收到错误消息“ - [__ NSArrayM objectAtIndex:]:索引0超出空数组的边界”。据我所知,在实际显示视图或需要绘制视图之前,我的数组应该用零完全初始化。

这是我的NSViewController子类中的-loadView方法:

- (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 个答案:

答案 0 :(得分:2)

您有==而不是!=,因此您的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];
}