我正在尝试设置一个简单的基于 Mac 的 2D 平铺引擎,使用 2D NSMutableArray 进行映射。我正在使用 NSViewController 的子类,并引用地图对象(其中包含所述数组),并通过它将平铺数据的绘图请求传递给地图,以维护 MVC 完整性。但是,在我的 drawRect 代码开始触发之前,我的应用程序似乎没有用对象填充数组。
每次我按书面方式运行此应用程序时,我的窗口都无法加载,并且我在调试器中收到错误消息“-[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array”。据我所知,在实际显示或需要绘制视图之前,我的数组应该用零完全初始化。
这是我的 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 代码必须引用数组从那里开始并很快失败。我一定是做错了什么或不正常,但我无法弄清楚它可能是什么。