私は次のようにプログラムでUIButtonを追加する簡単なアプリケーションを持っています
for(int i=0;i<[self.contentList count];i++)
{
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self action:@selector(buttonSelection:)forControlEvents:UIControlEventTouchDown];
[button setTitle:[ [contentList objectAtIndex:i] valueForKey:@"nameKey"] forState:UIControlStateNormal];
button.tag=i+kButtonTagOffset;
[self.view insertSubview:button atIndex:0];
// [button release];
}
次に、ビューのときにアクセスして、次のように向きを変更し、次のように位置を調整します
for (int row = 0; row < Portrait_TILE_ROWS; ++row)
{
for (int col = 0; col < Portrait_TILE_COLUMNS; ++col)
{
int index = (row * Portrait_TILE_COLUMNS) + col;
CGRect frame = CGRectMake(LandScape_TILE_MARGIN + col * (LandScape_TILE_MARGIN + LandScape_TILE_WIDTH),
LandScape_TILE_MARGIN + row * (LandScape_TILE_MARGIN + LandScape_TILE_HEIGHT),
LandScape_TILE_WIDTH, LandScape_TILE_HEIGHT);
UIButton *tmb= (UIButton *)[self.view viewWithTag:index+kButtonTagOffset];
if([tmb isKindOfClass:[UIButton class]]) //isKindOfClass
{
[ [self.view viewWithTag:index+kButtonTagOffset] setFrame:frame];
}
}
}
私の最初の質問は、サブビューに追加した後にUIBUttonを解放すると、なぜEXC_BAD_ACCESSエラーが発生し、シミュレータではなくデバイスでのみ発生するのかということです。サブビューに追加すると、オブジェクトの保持数が1つ増えて、後でアクセスすると思いました。そのエラーを発生させることはありませんか?
xcodeデバッガー内で、どのオブジェクトとそのEXC_BAD_ACCESS例外が発生したかをどのように把握できるか、コードの一部にコメントを付けるだけで把握できます。
ありがとうM