我正在尝试设置一个简单的基于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代码从那里开始并快速失败。我必须做错事或出错,但我无法弄清楚它可能是什么。
答案 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];
}