将一个项目列表加载到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];
}
请告诉我这可能是什么问题。
答案 0 :(得分:2)
不要发布video
。
当您从NSDictionary
检索某个值时,除非您明确retain
,否则您不拥有该值。
更具体地说,当您检索字符串时,它仍归字典所有。当你release
时,你正在释放一个你不拥有的对象,导致它被过度释放。因此,它被取消分配,当您下次尝试访问它时,内存不再有效,您的应用程序崩溃。