我试图设置一个简单的基于Mac的2D平铺引擎,使用2D NSMutableArray进行映射。为了保持MVC的完整性,我使用NSViewController的子类,引用地图对象(包含所述数组),并将瓦片数据的绘图请求通过它传递给地图。但是,我的应用程序似乎不会在我的drawRect代码开始触发前用对象填充数组。NSMutableArray在需要加载之前未被填充
每当我运行这个应用程序时,我的窗口无法加载,并且在调试器中收到错误消息“ - [__ NSArrayM objectAtIndex::index 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循环之前被调用 - 而obvio好吧,我的drawRect代码必须引用数组,然后从那里快速失败。我一定是做错了什么,或者做错了什么,但我无法弄清楚它可能是什么。
事实上,就是这样。非常感谢你指出今天早上我的大脑拒绝了什么。 :) –