UITableView didSelectRowAtIndexPath错误 - 再次选择项目时

时间:2011-09-02 04:38:04

标签: uitableview xcode4 uialertview didselectrowatindexpath

将一个项目列表加载到UITableview上,并且能够单击并显示所选行的警报。但是,在警报上说“ok”并且我在已经选择的行上重新点击后,我的代码就会出现“Thread 1:Program received signal: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]; 

}

请告诉我这可能是什么问题。

1 个答案:

答案 0 :(得分:2)

不要发布video

当您从NSDictionary检索某个值时,除非您明确retain,否则您不拥有该值。

更具体地说,当您检索字符串时,它仍归字典所有。当你release时,你正在释放一个你不拥有的对象,导致它被过度释放。因此,它被取消分配,当您下次尝试访问它时,内存不再有效,您的应用程序崩溃。