任何人都可以告诉我为什么我在这块代码上获得了EXC_BAD_ACCESS?我使用Allocations和NSZombie启用了仪器,它说我发了一个僵尸消息,但看不出它有什么用。
NSMutableArray *keys = [NSMutableArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource: @"keys" ofType:@"plist"]];
//format: row, col
id myarray[4][13];
for (int row = 0; row<4; row++){
for (int col = 0; col<13;col++) {
myarray[row][col] = [keys objectAtIndex:0];
if (col < 13)
[keys removeObjectAtIndex:0];
}
}
for (int row = 0; row<4; row++){
for (int col = 0; col<13;col++) {
UIButton *aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
aButton.frame = CGRectMake(5+col*65,5+row*65, 60, 60);
NSLog(@"%@",myarray[row][col]);
[aButton setTitle:myarray[row][col] forState:UIControlStateNormal];
[aButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
[keyboardView addSubview: aButton];
NSLog(@"%@",myarray[row][col]); //I think it is this NSLog causing problem
}
}
以下是仪器的统计数据:
alt text http://i28.tinypic.com/24q1ixc.jpg
由于
答案 0 :(得分:2)
myarray[row][col] = [keys objectAtIndex:0];
if (col < 13)
[keys removeObjectAtIndex:0];
根据条件,col
始终为< 13
,因此始终会运行-removeObjectAtIndex:
。但这将-release
[keys objectAtIndex:0]
在前一行中。由于myarray[row][col]
与它共享相同的引用,因此有可能将其解除分配 - 这是导致崩溃的原因。
您必须-retain
该对象才能使其保持活力,例如
myarray[row][col] = [[[keys objectAtIndex:0] retain] autorelease];
答案 1 :(得分:0)
在评论NSLog语句后尝试过吗?