在这段代码中,在第二个for循环中,如果我使用i和j以外的标识符,我会得到一个EXC_BAD_ACCESS。
if (UIDeviceOrientationIsPortrait(deviceOrientation)){
numRows = 4;
numCols = 3;
}else {
numRows = 6;
numCols = 1;
}
for (int row = 0; row < numRows; row++){
for (int col = 0; col < numCols; col++) {
keysArray[row][col] = [[[keys objectAtIndex:0] retain] autorelease];
if (col < numRows)
[keys removeObjectAtIndex:0];
}
}
//Here is the crash
for (int i = 0; i < numRows; i++) {
for (int j = 0; j < numCols; j++){
UIButton *b = [UIButton buttonWithType:UIButtonTypeCustom];
b.frame = CGRectMake(i * kKeyGap, j * kKeyGap, 57, 57);
[b setImage: [UIImage imageNamed:keysArray[j][i]]
forState:UIControlStateNormal];
[self.view addSubview:b];
}
}
为什么会导致这样的错误?我尝试使用Edit All In Scope来避免错过,但它仍然崩溃。
由于
答案 0 :(得分:1)
你的专栏:
keysArray[row][col] = [[[keys objectAtIndex:0] retain] autorelease];
我不是Objective-C专家或任何东西,但我不确定你是否需要自动释放该对象,因为你没有为它分配内存。当您尝试删除该自动释放时会发生什么?
我怀疑是在您自动释放对象然后尝试在此处分配数组值之后:
[b setImage: [UIImage imageNamed:keysArray[j][i]]
forState:UIControlStateNormal];
你正在获得EXC_BAD_ACCESS。
我可能是错的,在这种情况下,我希望比我聪明的人可以清除它。 :)
答案 1 :(得分:0)
在你的第一个循环中,你在第二个循环中引用keysArray[row][col]
,你似乎正在使用keysArray[col][row]
,如果numRows和numCols不同会导致它崩溃