NSMutableArray在需要加载之前未填充



我正试图建立一个简单的基于Mac的2D平铺引擎,使用2D NSMutableArray进行映射。我正在使用NSViewController的一个子类,该子类引用映射对象(包含所述数组),并通过它向映射传递对平铺数据的绘图请求,以维护MVC的完整性。但是,在drawRect代码开始激发之前,我的应用程序似乎没有用对象填充数组。

每次我按照编写的方式运行此应用程序时,我的窗口都无法加载,并且我在调试器中收到错误消息"-[__NSArrayM objectAtIndex:]:index 0 exceed bound for empty array"。据我所知,在实际显示或需要绘制视图之前,我的数组应该完全用零初始化。

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

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

这是我的map对象的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代码必须引用数组,然后很快就会失败。我一定是做错了什么或出了问题,但我不知道可能是什么。

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

相关内容

  • 没有找到相关文章

最新更新