1

アイテムのリストを UITableview にロードし、クリックして選択した行のアラートを表示することができました。しかし、アラートで「OK」と言った後、すでに選択されている行を再クリックすると、「スレッド 1: プログラムが信号を受信しました:EXC_BAD_ACCESS」と言ってコードが壊れます。以下のコードを見てください。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSDictionary *playerselected = [exercises objectAtIndex:indexPath.row];
    NSString *video = [playerselected valueForKey:@"video"];

    NSString *msg = [[NSString alloc] initWithFormat:@"You have selected %@", video];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Player selected" 
                                                    message:msg 
                                                   delegate:self 
                                          cancelButtonTitle:@"OK" 
                                          otherButtonTitles:nil];    

    [alert show];     
    [alert release];
    [video release];
    [msg release]; 

}

ここで何が問題なのか教えてください。

4

1 に答える 1

2

リリースしないでくださいvideo

から値を取得する場合、NSDictionary明示的に指定しない限り、その値を所有していませんretain

より具体的には、文字列を取得すると、それはまだ辞書によって所有されています。所有してreleaseいないオブジェクトを解放しているため、過剰に解放されています。その結果、割り当てが解除され、次にアクセスしようとすると、メモリが無効になり、アプリがクラッシュします。

于 2011-09-02T04:43:26.833 に答える